diff --git a/.clang-format-ignore b/.clang-format-ignore new file mode 100644 index 000000000..ed705ff78 --- /dev/null +++ b/.clang-format-ignore @@ -0,0 +1,19 @@ +./test/tools/libtesteth/* +./test/tools/fuzzTesting/* +./test/tools/libtestutils/* +./test/tools/jsontests/* +./test/unittests/external-dependencies/* +./test/unittests/libskutils/* +./test/unittests/libdevcrypto/* +./test/unittests/libethcore/* +./test/unittests/libethereum/* +./test/unittests/libweb3core/* +./test/unittests/libweb3jsonrpc/* +./test/unittests/libtesteth/* +./test/unittests/libdevcore/* +./test/unittests/libethashseal/* +./test/unittests/mapreduce_consensus/* +./test/unittests/libevm/* +./test/unittests/libskale/* +./storage_benchmark/* +./skale-vm/* \ No newline at end of file diff --git a/VERSION b/VERSION index fcdb2e109..72490fd85 100644 --- a/VERSION +++ b/VERSION @@ -1 +1,2 @@ 4.0.0 + diff --git a/libbatched-io/batched_db.cpp b/libbatched-io/batched_db.cpp index 4168ca41f..7dee39e38 100644 --- a/libbatched-io/batched_db.cpp +++ b/libbatched-io/batched_db.cpp @@ -4,11 +4,6 @@ namespace batched_io { using namespace dev::db; -batched_db::~batched_db() { - // all batches should be either commit()'ted or revert()'ed! - assert( !m_batch ); -} - db_operations_face* db_splitter::new_interface() { assert( this->m_interfaces.size() < 256 ); diff --git a/libbatched-io/batched_db.h b/libbatched-io/batched_db.h index e2465d087..fcce17df5 100644 --- a/libbatched-io/batched_db.h +++ b/libbatched-io/batched_db.h @@ -3,6 +3,7 @@ #include "batched_io.h" +#include #include #include @@ -76,7 +77,64 @@ class batched_db : public db_face { m_db->forEachWithPrefix( _prefix, f ); } - virtual ~batched_db(); + virtual ~batched_db() = default; + +protected: + void recover() { /*nothing*/ + } +}; + + +class read_only_snap_based_batched_db : public db_face { +private: + std::shared_ptr< dev::db::DBImpl > m_db; + std::shared_ptr< dev::db::LevelDBSnap > m_snap; + +public: + read_only_snap_based_batched_db( + std::shared_ptr< dev::db::DBImpl > _db, std::shared_ptr< dev::db::LevelDBSnap > _snap ) { + LDB_CHECK( _db ); + LDB_CHECK( _snap ); + m_db = _db; + m_snap = _snap; + } + + bool is_open() const { return !!m_db; }; + + void insert( dev::db::Slice, dev::db::Slice ) override { + throw std::runtime_error( "Function not implemented:" + std::string( __FUNCTION__ ) ); + } + + void kill( dev::db::Slice ) override { + throw std::runtime_error( "Function not implemented:" + std::string( __FUNCTION__ ) ); + } + + void revert() override { + throw std::runtime_error( "Function not implemented:" + std::string( __FUNCTION__ ) ); + } + + void commit( const std::string& ) override { + throw std::runtime_error( "Function not implemented:" + std::string( __FUNCTION__ ) ); + } + + // readonly + std::string lookup( dev::db::Slice _key ) const override { + return m_db->lookup( _key, m_snap ); + } + + bool exists( dev::db::Slice _key ) const override { return m_db->exists( _key, m_snap ); } + + void forEach( std::function< bool( dev::db::Slice, dev::db::Slice ) > _f ) const override { + static std::string emptyString; + return forEachWithPrefix( emptyString, _f ); + } + + void forEachWithPrefix( std::string& _prefix, + std::function< bool( dev::db::Slice, dev::db::Slice ) > _f ) const override { + m_db->forEachWithPrefix( _prefix, _f, m_snap ); + } + + virtual ~read_only_snap_based_batched_db() = default; protected: void recover() { /*nothing*/ diff --git a/libconsensus b/libconsensus index fda7a2ff8..3b83e8980 160000 --- a/libconsensus +++ b/libconsensus @@ -1 +1 @@ -Subproject commit fda7a2ff89e34e924920a5b3682d93757cc4b0e3 +Subproject commit 3b83e8980f7246b46f08353ba3371cf2cd4e9d76 diff --git a/libdevcore/LevelDB.cpp b/libdevcore/LevelDB.cpp index ba019a426..c4269f68e 100644 --- a/libdevcore/LevelDB.cpp +++ b/libdevcore/LevelDB.cpp @@ -20,6 +20,7 @@ #include "LevelDB.h" #include "Assertions.h" +#include "LevelDBSnap.h" #include "Log.h" #include @@ -144,6 +145,7 @@ void LevelDB::openDBInstanceUnsafe() { m_db.reset( db ); m_lastDBOpenTimeMs = getCurrentTimeMs(); + m_dbReopenId++; cnote << "LEVELDB_OPENED:TIME_MS:" << m_lastDBOpenTimeMs - startTimeMs; } uint64_t LevelDB::getCurrentTimeMs() { @@ -159,14 +161,15 @@ LevelDB::~LevelDB() { } std::string LevelDB::lookup( Slice _key ) const { + return lookup( _key, nullptr ); +} + +std::string LevelDB::lookup( Slice _key, const std::shared_ptr< LevelDBSnap >& _snap ) const { leveldb::Slice const key( _key.data(), _key.size() ); std::string value; - leveldb::Status status; - { - SharedDBGuard readLock( *this ); - status = m_db->Get( m_readOptions, key, &value ); - } + auto status = getValue( m_readOptions, key, value, _snap ); + if ( status.IsNotFound() ) return std::string(); @@ -175,13 +178,15 @@ std::string LevelDB::lookup( Slice _key ) const { } bool LevelDB::exists( Slice _key ) const { + return exists( _key, nullptr ); +} + +bool LevelDB::exists( Slice _key, const std::shared_ptr< LevelDBSnap >& _snap ) const { std::string value; leveldb::Slice const key( _key.data(), _key.size() ); - leveldb::Status status; - { - SharedDBGuard lock( *this ); - status = m_db->Get( m_readOptions, key, &value ); - } + + auto status = getValue( m_readOptions, key, value, _snap ); + if ( status.IsNotFound() ) return false; @@ -189,12 +194,25 @@ bool LevelDB::exists( Slice _key ) const { return true; } +leveldb::Status LevelDB::getValue( leveldb::ReadOptions _readOptions, const leveldb::Slice& _key, + std::string& _value, const std::shared_ptr< LevelDBSnap >& _snap ) const { + SharedDBGuard lock( *this ); // protect so db is not reopened during get call + if ( _snap ) { + // sanity check to make sure that the snap was created for this particular + // db handle + LDB_CHECK( m_dbReopenId == _snap->getParentDbReopenId() ); + return _snap->getValue( m_db, _readOptions, _key, _value ); + } else { + return m_db->Get( _readOptions, _key, &_value ); + } +} + void LevelDB::insert( Slice _key, Slice _value ) { leveldb::Slice const key( _key.data(), _key.size() ); leveldb::Slice const value( _value.data(), _value.size() ); leveldb::Status status; { - SharedDBGuard lock( *this ); + SharedDBGuard lock( *this ); // protect so db is not reopened during Put() call status = m_db->Put( m_writeOptions, key, value ); } checkStatus( status ); @@ -224,7 +242,7 @@ void LevelDB::commit( std::unique_ptr< WriteBatchFace > _batch ) { } leveldb::Status status; { - SharedDBGuard lock( *this ); + SharedDBGuard lock( *this ); // protect so db is not reopened during Write() call status = m_db->Write( m_writeOptions, &batchPtr->writeBatch() ); } // Commit happened. This means the keys actually got deleted in LevelDB. Increment key deletes @@ -247,17 +265,25 @@ void LevelDB::reopenDataBaseIfNeeded() { auto currentTimeMs = getCurrentTimeMs(); if ( currentTimeMs - m_lastDBOpenTimeMs >= ( uint64_t ) m_reopenPeriodMs ) { - ExclusiveDBGuard lock( *this ); - // releasing unique pointer will cause database destructor to be called that will close db - m_db.reset(); - // now open db while holding the exclusive lock - openDBInstanceUnsafe(); + reopen(); } } +void LevelDB::reopen() { + ExclusiveDBGuard lock( *this ); + // close all current snaps by passing max lifetime as zero + auto aliveSnaps = m_snapManager.garbageCollectUnusedOldSnaps( m_db, m_dbReopenId, 0 ); + LDB_CHECK( aliveSnaps == 0 ); + + // releasing unique pointer will cause database destructor to be called that will close db + LDB_CHECK( m_db ); + m_db.reset(); + // now open db while holding the exclusive lock + openDBInstanceUnsafe(); +} void LevelDB::forEach( std::function< bool( Slice, Slice ) > f ) const { cwarn << "Iterating over the entire LevelDB database: " << this->m_path; - SharedDBGuard lock( *this ); + SharedDBGuard lock( *this ); // protect so db is not reopened during iteration std::unique_ptr< leveldb::Iterator > itr( m_db->NewIterator( m_readOptions ) ); if ( itr == nullptr ) { BOOST_THROW_EXCEPTION( DatabaseError() << errinfo_comment( "null iterator" ) ); @@ -273,10 +299,22 @@ void LevelDB::forEach( std::function< bool( Slice, Slice ) > f ) const { } void LevelDB::forEachWithPrefix( - std::string& _prefix, std::function< bool( Slice, Slice ) > f ) const { - cnote << "Iterating over the LevelDB prefix: " << _prefix; - SharedDBGuard lock( *this ); - std::unique_ptr< leveldb::Iterator > itr( m_db->NewIterator( m_readOptions ) ); + std::string& _prefix, std::function< bool( Slice, Slice ) > _f ) const { + forEachWithPrefix( _prefix, _f, nullptr ); +} + +void LevelDB::forEachWithPrefix( std::string& _prefix, std::function< bool( Slice, Slice ) > f, + const std::shared_ptr< LevelDBSnap >& _snap ) const { + SharedDBGuard lock( *this ); // protect so DB is not reopened during iteration + + std::unique_ptr< leveldb::Iterator > itr; + + if ( _snap ) { + LDB_CHECK( m_dbReopenId == _snap->getParentDbReopenId() ); + itr = _snap->getIterator( m_db, m_readOptions ); + } else { + itr.reset( m_db->NewIterator( m_readOptions ) ); + } if ( itr == nullptr ) { BOOST_THROW_EXCEPTION( DatabaseError() << errinfo_comment( "null iterator" ) ); } @@ -292,6 +330,18 @@ void LevelDB::forEachWithPrefix( } } +void LevelDB::createBlockSnap( uint64_t _blockNumber ) { + SharedDBGuard lock( *this ); // protect so db is not reopened during snap creation + m_snapManager.addSnapForBlock( _blockNumber, m_db, m_dbReopenId ); +} + +std::shared_ptr< LevelDBSnap > LevelDB::getLastBlockSnap() const { + SharedDBGuard lock( *this ); // protect so db is not reopened when while we get snap + auto snap = m_snapManager.getLastBlockSnap(); + LDB_CHECK( snap ); + return snap; +} + h256 LevelDB::hashBase() const { SharedDBGuard lock( *this ); std::unique_ptr< leveldb::Iterator > it( m_db->NewIterator( m_readOptions ) ); diff --git a/libdevcore/LevelDB.h b/libdevcore/LevelDB.h index 5aa1f7df0..d90ebe7b5 100644 --- a/libdevcore/LevelDB.h +++ b/libdevcore/LevelDB.h @@ -19,6 +19,7 @@ #pragma once +#include "LevelDBSnapManager.h" #include "db.h" #include @@ -29,7 +30,17 @@ #include #include +#define LDB_CHECK( _EXPRESSION_ ) \ + if ( !( _EXPRESSION_ ) ) { \ + auto __msg__ = std::string( "State check failed::" ) + #_EXPRESSION_ + " " + \ + std::string( __FILE__ ) + ":" + std::to_string( __LINE__ ); \ + BOOST_THROW_EXCEPTION( dev::db::DatabaseError() << dev::errinfo_comment( __msg__ ) ); \ + } + namespace dev::db { + +class LevelDBSnap; + class LevelDB : public DatabaseFace { public: static leveldb::ReadOptions defaultReadOptions(); @@ -58,6 +69,18 @@ class LevelDB : public DatabaseFace { void forEachWithPrefix( std::string& _prefix, std::function< bool( Slice, Slice ) > f ) const override; + // create a read only snap after blockl processing + void createBlockSnap( uint64_t _blockNumber ); + + // get block snap for the lasty block + std::shared_ptr< LevelDBSnap > getLastBlockSnap() const; + + // perform operations with respect to a particular read only snap + std::string lookup( Slice _key, const std::shared_ptr< LevelDBSnap >& _snap ) const; + bool exists( Slice _key, const std::shared_ptr< LevelDBSnap >& _snap ) const; + void forEachWithPrefix( std::string& _prefix, std::function< bool( Slice, Slice ) > f, + const std::shared_ptr< LevelDBSnap >& _snap ) const; + h256 hashBase() const override; h256 hashBaseWithPrefix( char _prefix ) const; @@ -75,6 +98,14 @@ class LevelDB : public DatabaseFace { private: std::unique_ptr< leveldb::DB > m_db; + + // stores and manages snap objects + LevelDBSnapManager m_snapManager; + // this is incremented each time this LevelDB instance is reopened + // we reopen states LevelDB every day on archive nodes to avoid + // meta file getting too large + // in other cases LevelDB is never reopened to this stays zero + std::atomic< uint64_t > m_dbReopenId = 0; leveldb::ReadOptions const m_readOptions; leveldb::WriteOptions const m_writeOptions; leveldb::Options m_options; @@ -125,6 +156,9 @@ class LevelDB : public DatabaseFace { }; void openDBInstanceUnsafe(); void reopenDataBaseIfNeeded(); + leveldb::Status getValue( leveldb::ReadOptions _readOptions, const leveldb::Slice& _key, + std::string& _value, const std::shared_ptr< LevelDBSnap >& _snap ) const; + void reopen(); }; } // namespace dev::db diff --git a/libdevcore/LevelDBSnap.cpp b/libdevcore/LevelDBSnap.cpp new file mode 100644 index 000000000..f3965aed8 --- /dev/null +++ b/libdevcore/LevelDBSnap.cpp @@ -0,0 +1,109 @@ +/* + Modifications Copyright (C) 2024- SKALE Labs + + This file is part of cpp-ethereum. + + cpp-ethereum is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + cpp-ethereum is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with cpp-ethereum. If not, see . +*/ + + +#include "LevelDBSnap.h" +#include "Assertions.h" +#include "LevelDB.h" + +using std::string, std::runtime_error; + +namespace dev::db { + +bool LevelDBSnap::isClosed() const { + return m_isClosed; +} + +// construct a snap object that can be used to read snapshot of a state +LevelDBSnap::LevelDBSnap( + uint64_t _blockId, const leveldb::Snapshot* _snap, uint64_t _parentLevelDBReopenId ) + : m_blockId( _blockId ), m_snap( _snap ), m_parentDBReopenId( _parentLevelDBReopenId ) { + LDB_CHECK( m_snap ) + m_creationTimeMs = LevelDB::getCurrentTimeMs(); + m_instanceId = objectCounter.fetch_add( 1 ); +} + + +// close LevelDB snap. This will happen when all eth_calls using this snap +// complete, so it is not needed anymore +// reopen the DB +void LevelDBSnap::close( std::unique_ptr< leveldb::DB >& _parentDB, uint64_t _parentDBReopenId ) { + // do an write lock to make sure all on-going read calls from this snap complete before + // this to make the snap is not being used in a levelb call + std::unique_lock< std::shared_mutex > lock( m_usageMutex ); + if ( m_isClosed ) { + cerror << "Close called twice on a snap" << std::endl; + return; + } + + m_isClosed = true; + + LDB_CHECK( _parentDB ); + LDB_CHECK( m_snap ); + // sanity check. We should use the same DB handle that was used to open this snap + LDB_CHECK( _parentDBReopenId == m_parentDBReopenId ); + // do an exclusive lock on the usage mutex + // this to make the snap is not being used in a levelb call + _parentDB->ReleaseSnapshot( m_snap ); + m_snap = nullptr; +} +LevelDBSnap::~LevelDBSnap() { + if ( !m_isClosed ) { + cnote << "LevelDB: destroying active snap." << std::endl; + } +} + + +uint64_t LevelDBSnap::getInstanceId() const { + return m_instanceId; +} + +std::atomic< uint64_t > LevelDBSnap::objectCounter = 0; + +uint64_t LevelDBSnap::getCreationTimeMs() const { + return m_creationTimeMs; +} + +// this is used primary in eth_calls +leveldb::Status LevelDBSnap::getValue( const std::unique_ptr< leveldb::DB >& _db, + leveldb::ReadOptions _readOptions, const leveldb::Slice& _key, std::string& _value ) { + LDB_CHECK( _db ); + // lock to make sure snap is not concurrently closed while reading from it + std::shared_lock< std::shared_mutex > lock( m_usageMutex ); + LDB_CHECK( !isClosed() ) + _readOptions.snapshot = m_snap; + return _db->Get( _readOptions, _key, &_value ); +} + +std::unique_ptr< leveldb::Iterator > LevelDBSnap::getIterator( + const std::unique_ptr< leveldb::DB >& _db, leveldb::ReadOptions _readOptions ) { + LDB_CHECK( _db ); + // lock to make sure snap is not concurrently closed while reading from it + std::shared_lock< std::shared_mutex > lock( m_usageMutex ); + LDB_CHECK( !isClosed() ) + _readOptions.snapshot = m_snap; + auto iterator = _db->NewIterator( _readOptions ); + return std::unique_ptr< leveldb::Iterator >( iterator ); +} + +uint64_t LevelDBSnap::getParentDbReopenId() const { + return m_parentDBReopenId; +} + +} // namespace dev::db diff --git a/libdevcore/LevelDBSnap.h b/libdevcore/LevelDBSnap.h new file mode 100644 index 000000000..5dd4d224a --- /dev/null +++ b/libdevcore/LevelDBSnap.h @@ -0,0 +1,92 @@ +/* + Modifications Copyright (C) 2024- SKALE Labs + + This file is part of cpp-ethereum. + + cpp-ethereum is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + cpp-ethereum is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with cpp-ethereum. If not, see . +*/ + +#pragma once + +#include "db.h" + +#include +#include +#include +#include + +#include +#include + +namespace dev::db { + +class LevelDB; + +// internal class of LevelDB that represents the +// this class represents a LevelDB snap corresponding to the point immediately +// after processing of a particular block id. +class LevelDBSnap { +public: + LevelDBSnap( + uint64_t _blockId, const leveldb::Snapshot* _snap, uint64_t _parentLevelDBReopenId ); + + // close this snapshot. Use after close will cause an exception + void close( std::unique_ptr< leveldb::DB >& _parentDB, uint64_t _parentDBReopenId ); + + virtual ~LevelDBSnap(); + + leveldb::Status getValue( const std::unique_ptr< leveldb::DB >& _db, + leveldb::ReadOptions _readOptions, const leveldb::Slice& _key, std::string& _value ); + + leveldb::Status getValue( const std::unique_ptr< leveldb::DB >& _db, + leveldb::ReadOptions _readOptions, std::string& _value ); + + std::unique_ptr< leveldb::Iterator > getIterator( + const std::unique_ptr< leveldb::DB >& _db, leveldb::ReadOptions _readOptions ); + + uint64_t getInstanceId() const; + + uint64_t getParentDbReopenId() const; + + uint64_t getCreationTimeMs() const; + + bool isClosed() const; + +private: + const uint64_t m_blockId; + + const leveldb::Snapshot* m_snap = nullptr; + + std::atomic< bool > m_isClosed = false; + // this mutex is shared=locked everytime a LevedLB API read call is done on the + // snapshot, and unique-locked when the snapshot is to be closed + // This is to prevent closing snapshot handle while concurrently executing a LevelDB call + std::shared_mutex m_usageMutex; + + uint64_t m_creationTimeMs; + + // LevelDB identifier for which this snapShot has been // created + // this is used to match snaps to leveldb handles + // the reopen id of the parent database handle. When a database is reopened + // the database handle and all snap handles are invalidated + // we use this field to make sure that we never use a stale snap handle for which + // the database handle already does not exist + uint64_t m_parentDBReopenId; + + std::atomic< uint64_t > m_instanceId; // unique id of this snap object instance + + static std::atomic< uint64_t > objectCounter; +}; + +} // namespace dev::db diff --git a/libdevcore/LevelDBSnapManager.cpp b/libdevcore/LevelDBSnapManager.cpp new file mode 100644 index 000000000..d585994ab --- /dev/null +++ b/libdevcore/LevelDBSnapManager.cpp @@ -0,0 +1,115 @@ +/* + Modifications Copyright (C) 2024- SKALE Labs + + This file is part of cpp-ethereum. + + cpp-ethereum is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + cpp-ethereum is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with cpp-ethereum. If not, see . +*/ + + +#include "LevelDBSnapManager.h" +#include "Assertions.h" +#include "LevelDB.h" +#include "LevelDBSnap.h" + + +using std::string, std::runtime_error; + +namespace dev::db { + +// this function will close snaps that are not used in on-going eth_calls, +// meaning that no one has a reference +// to the shared pointer except the oldSnaps map itself +// It will also close snaps that are used but that are older than _maxSnapLifetimeMs +// this closure will cause the corresponding eth_calls return with an error. +// this should only happen to eth_calls that hang for a long time +// this function returns the size of oldSnaps after cleanup +uint64_t LevelDBSnapManager::garbageCollectUnusedOldSnaps( + std::unique_ptr< leveldb::DB >& _db, uint64_t _dbReopenId, uint64_t _maxSnapLifetimeMs ) { + std::vector< std::shared_ptr< LevelDBSnap > > unusedOldSnaps; + + uint64_t mapSizeAfterCleanup; + + auto currentTimeMs = LevelDB::getCurrentTimeMs(); + + { + // find all old snaps and remove them from the map + // this needs to be done write lock so the map is not concurrently modified + std::unique_lock< std::shared_mutex > snapLock( m_snapMutex ); + for ( auto it = oldSnaps.begin(); it != oldSnaps.end(); ) { + // a snap is unused if no one using this snap anymore except the map itself + if ( it->second.use_count() == 1 || + it->second->getCreationTimeMs() + _maxSnapLifetimeMs <= currentTimeMs ) { + // erase this snap from the map + // note that push back needs to happen before erase since erase will + // destroy the snap object if there ar no more references + unusedOldSnaps.push_back( it->second ); + it = oldSnaps.erase( it ); + } else { + ++it; // Only increment if not erasing + } + } + mapSizeAfterCleanup = oldSnaps.size(); + } + + // now we removed unused snaps from the map. Close them + + for ( auto&& snap : unusedOldSnaps ) { + LDB_CHECK( snap ); + snap->close( _db, _dbReopenId ); + } + return mapSizeAfterCleanup; +} + + +// this will be called from EVM processing thread just after the block is processed +void LevelDBSnapManager::addSnapForBlock( + uint64_t _blockNumber, std::unique_ptr< leveldb::DB >& _db, uint64_t _dbInstanceId ) { + createNewSnap( _blockNumber, _db, _dbInstanceId ); + + // we garbage-collect unused old snaps that no-one used or that exist for more that max + // lifetime we give for eth_calls to complete + garbageCollectUnusedOldSnaps( _db, _dbInstanceId, OLD_SNAP_LIFETIME_MS ); +} + + +// this will create new last block snap and move previous last block snap into old snaps map +void LevelDBSnapManager::createNewSnap( + uint64_t _blockId, std::unique_ptr< leveldb::DB >& _db, uint64_t _dbInstanceId ) { + // hold the write lock during the update so snap manager does not return inconsistent value + // snap creation in LevelDB should happen really fast + std::unique_lock< std::shared_mutex > lock( m_snapMutex ); + + LDB_CHECK( _db ); + auto newSnapHandle = _db->GetSnapshot(); + LDB_CHECK( newSnapHandle ); + + auto newSnap = std::make_shared< LevelDBSnap >( _blockId, newSnapHandle, _dbInstanceId ); + LDB_CHECK( newSnap ); + + auto oldSnap = m_lastBlockSnap; + m_lastBlockSnap = newSnap; + if ( oldSnap ) { + oldSnaps.emplace( oldSnap->getInstanceId(), oldSnap ); + } +} +const std::shared_ptr< LevelDBSnap >& LevelDBSnapManager::getLastBlockSnap() const { + // read lock briefly to make no snap is concurrently created. + // Note: shared pointer is not thread safe + std::shared_lock< std::shared_mutex > lock( m_snapMutex ); + return m_lastBlockSnap; +} + + +} // namespace dev::db diff --git a/libdevcore/LevelDBSnapManager.h b/libdevcore/LevelDBSnapManager.h new file mode 100644 index 000000000..168ab765a --- /dev/null +++ b/libdevcore/LevelDBSnapManager.h @@ -0,0 +1,75 @@ +/* + Modifications Copyright (C) 2024- SKALE Labs + + This file is part of cpp-ethereum. + + cpp-ethereum is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + cpp-ethereum is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with cpp-ethereum. If not, see . +*/ + +#pragma once + +#include "db.h" + +#include +#include +#include +#include + +#include +#include + +namespace dev::db { + +class LevelDB; +class LevelDBSnap; + +// internal class of LevelDB that represents the +// this class represents a LevelDB snap corresponding to the point immediately +// after processing of a particular block id. +class LevelDBSnapManager { +public: + const std::shared_ptr< LevelDBSnap >& getLastBlockSnap() const; + + + LevelDBSnapManager(){}; + + void addSnapForBlock( + uint64_t _blockNumber, std::unique_ptr< leveldb::DB >& _db, uint64_t _dbInstanceId ); + + void closeAllOpenSnaps( std::unique_ptr< leveldb::DB >& _db, uint64_t _dbInstanceId ); + + // this function should be called while holding database reopen lock + uint64_t garbageCollectUnusedOldSnaps( + std::unique_ptr< leveldb::DB >& _db, uint64_t _dbReopenId, uint64_t _maxSnapLifetimeMs ); + +private: + // old snaps contains snap objects for older blocks + // these objects are alive untils the + // corresponding eth_calls complete + std::map< std::uint64_t, std::shared_ptr< LevelDBSnap > > oldSnaps; + std::shared_ptr< LevelDBSnap > m_lastBlockSnap; + // mutex to protect snaps and m_lastBlockSnap; + mutable std::shared_mutex m_snapMutex; + + // time after an existing old snap will be closed if no-one is using it + static const size_t OLD_SNAP_LIFETIME_MS = 30000; + // time after an existing old snap will be closed it is used in eth_call + // this will cause the eth_call to return an error + static const size_t FORCE_SNAP_CLOSE_TIME_MS = 3000; + + void createNewSnap( + uint64_t _blockId, std::unique_ptr< leveldb::DB >& _db, uint64_t _dbInstanceId ); +}; + +} // namespace dev::db diff --git a/libethcore/Exceptions.h b/libethcore/Exceptions.h index a39c33a00..861c6156a 100644 --- a/libethcore/Exceptions.h +++ b/libethcore/Exceptions.h @@ -48,6 +48,7 @@ DEV_SIMPLE_EXCEPTION( NotEnoughAvailableSpace ); DEV_SIMPLE_EXCEPTION( NotEnoughCash ); DEV_SIMPLE_EXCEPTION( GasPriceTooLow ); DEV_SIMPLE_EXCEPTION( SameNonceAlreadyInQueue ); +DEV_SIMPLE_EXCEPTION( NonceTooMuchInTheFuture ); DEV_SIMPLE_EXCEPTION( BlockGasLimitReached ); DEV_SIMPLE_EXCEPTION( FeeTooSmall ); DEV_SIMPLE_EXCEPTION( TooMuchGasUsed ); diff --git a/libethcore/TransactionBase.cpp b/libethcore/TransactionBase.cpp index 55dbeb154..ae1c047b1 100644 --- a/libethcore/TransactionBase.cpp +++ b/libethcore/TransactionBase.cpp @@ -165,7 +165,7 @@ void TransactionBase::fillFromBytesLegacy( _e << errinfo_name( "invalid transaction format: " + toString( rlp ) + " RLP: " + toHex( rlp.data() ) ); m_type = Type::Invalid; - m_rawData = _rlpData.toBytes(); + m_rawData = std::make_shared< bytes >( _rlpData.toBytes() ); if ( !_allowInvalid ) throw; @@ -226,7 +226,7 @@ void TransactionBase::fillFromBytesType1( _e << errinfo_name( "invalid transaction format: " + toString( rlp ) + " RLP: " + toHex( rlp.data() ) ); m_type = Type::Invalid; - m_rawData = _rlpData.toBytes(); + m_rawData = std::make_shared< bytes >( _rlpData.toBytes() ); if ( !_allowInvalid ) throw; @@ -294,7 +294,7 @@ void TransactionBase::fillFromBytesType2( _e << errinfo_name( "invalid transaction format: " + toString( rlp ) + " RLP: " + toHex( rlp.data() ) ); m_type = Type::Invalid; - m_rawData = _rlpData.toBytes(); + m_rawData = std::make_shared< bytes >( _rlpData.toBytes() ); if ( !_allowInvalid ) throw; @@ -341,11 +341,21 @@ TransactionBase::TransactionBase( } else { fillFromBytesLegacy( _rlpData, _checkSig, _allowInvalid ); } + } catch ( std::exception& e ) { + m_type = Type::Invalid; + RLPStream s; + s.append( _rlpData.toBytes() ); // add "string" header + m_rawData = std::make_shared< bytes >( s.out() ); + + if ( !_allowInvalid ) { + cerror << "Got invalid transaction." << e.what(); + throw; + } } catch ( ... ) { m_type = Type::Invalid; RLPStream s; s.append( _rlpData.toBytes() ); // add "string" header - m_rawData = s.out(); + m_rawData = std::make_shared< bytes >( s.out() ); if ( !_allowInvalid ) { cerror << "Got invalid transaction."; @@ -456,7 +466,7 @@ void TransactionBase::streamType2Transaction( RLPStream& _s, IncludeSignature _s void TransactionBase::streamRLP( RLPStream& _s, IncludeSignature _sig, bool _forEip155hash ) const { if ( isInvalid() ) { - _s.appendRaw( m_rawData ); + _s.appendRaw( *m_rawData ); return; } @@ -526,7 +536,7 @@ h256 TransactionBase::sha3( IncludeSignature _sig ) const { if ( m_txType != TransactionType::Legacy ) input.insert( input.begin(), m_txType ); } else { - RLP data( m_rawData ); + RLP data( *m_rawData ); input = dev::bytes( data.payload().begin(), data.payload().end() ); } diff --git a/libethcore/TransactionBase.h b/libethcore/TransactionBase.h index 36a3cd192..b23d1cc58 100644 --- a/libethcore/TransactionBase.h +++ b/libethcore/TransactionBase.h @@ -132,6 +132,20 @@ class TransactionBase { /// Force the chainId to a particular value. This will result in an invalid transaction RLP. void forceChainId( uint64_t _chainID ) { m_chainId = _chainID; } + /// Force type. This is used in tests + void forceType( TransactionType _type ) { m_txType = _type; } + + + /// Force Type2 fees. This is used in tests + void forceType2Fees( const u256& _maxFeePerGas, const u256& _maxPriorityFeePerGas ) { + m_maxFeePerGas = _maxFeePerGas; + m_maxPriorityFeePerGas = _maxPriorityFeePerGas; + } + + /// Force gas limit. This is used in tests + void forceGasPrice( const u256& _gasPrice ) { m_gasPrice = _gasPrice; } + + /// @throws TransactionIsUnsigned if signature was not initialized /// @throws InvalidSValue if the signature has an invalid S value. void checkLowS() const; @@ -291,7 +305,9 @@ class TransactionBase { ///< refunded once the contract is ended. bytes m_data; ///< The data associated with the transaction, or the initialiser if it's a ///< creation transaction. - bytes m_rawData; + // use shared pointer here speed up copy of transaction objects and save memory + std::shared_ptr< bytes > m_rawData = + std::make_shared< bytes >(); ///< Raw data, not owned by this object.> std::vector< bytes > m_accessList; ///< The access list. see more ///< https://eips.ethereum.org/EIPS/eip-2930. Not valid for ///< legacy txns diff --git a/libethereum/Block.cpp b/libethereum/Block.cpp index de58e2406..848acf2ee 100644 --- a/libethereum/Block.cpp +++ b/libethereum/Block.cpp @@ -145,6 +145,24 @@ Block& Block::operator=( Block const& _s ) { return *this; } + +// make a lightweight read only copy +// we only copy the fields we need for eth_call +// in particular we do not copy receipts and transactions +// as well as raw bytes +Block Block::getReadOnlyCopy() const { + Block copy( Null ); + copy.m_state = m_state.createReadOnlySnapBasedCopy(); + copy.m_author = m_author; + copy.m_sealEngine = m_sealEngine; + copy.m_committedToSeal = false; + copy.m_precommit = m_state; + copy.m_currentBlock = m_currentBlock; + copy.m_previousBlock = m_previousBlock; + return copy; +}; + + void Block::resetCurrent( int64_t _timestamp ) { m_transactions.clear(); m_receipts.clear(); @@ -163,8 +181,8 @@ void Block::resetCurrent( int64_t _timestamp ) { performIrregularModifications(); updateBlockhashContract(); - // if ( !m_state.checkVersion() ) - m_state = m_state.createNewCopyWithLocks(); + + m_state = m_state.createStateCopyAndClearCaches(); } SealEngineFace* Block::sealEngine() const { @@ -328,12 +346,12 @@ bool Block::sync( BlockChain const& _bc, h256 const& _block, BlockHeader const& ret = true; } #endif - // m_state = m_state.startNew(); resetCurrent( m_currentBlock.timestamp() ); - assert( m_state.checkVersion() ); return ret; } + +// Note - this function is only used in tests pair< TransactionReceipts, bool > Block::sync( BlockChain const& _bc, TransactionQueue& _tq, GasPricer const& _gp, unsigned msTimeout ) { MICROPROFILE_SCOPEI( "Block", "sync tq", MP_BURLYWOOD ); @@ -430,56 +448,76 @@ pair< TransactionReceipts, bool > Block::sync( return ret; } -tuple< TransactionReceipts, unsigned > Block::syncEveryone( - BlockChain const& _bc, const Transactions& _transactions, uint64_t _timestamp, u256 _gasPrice, - Transactions* vecMissing // it's non-null only for PARTIAL CATCHUP -) { +inline void Block::doPartialCatchupTestIfRequested( unsigned i ) { + static const char* FAIL_AT_TX_NUM = std::getenv( "TEST_FAIL_AT_TX_NUM" ); + static int64_t transactionCount = 0; + + if ( FAIL_AT_TX_NUM ) { + if ( transactionCount == std::stoi( FAIL_AT_TX_NUM ) ) { + // fail hard for test + cerror << "Test: crashing skaled on purpose after processing " << i + << " transactions in block"; + exit( -1 ); + } + + transactionCount++; + } +} + +tuple< TransactionReceipts, unsigned > Block::syncEveryone( BlockChain const& _bc, + const Transactions& _transactions, uint64_t _timestamp, u256 _gasPrice ) { if ( isSealed() ) BOOST_THROW_EXCEPTION( InvalidOperationOnSealedBlock() ); noteChain( _bc ); - // TRANSACTIONS - TransactionReceipts receipts; assert( _bc.currentHash() == m_currentBlock.parentHash() ); - // m_currentBlock.setTimestamp( _timestamp ); this->resetCurrent( _timestamp ); - m_state = m_state.createStateModifyCopyAndPassLock(); // mainly for debugging - TransactionReceipts saved_receipts = this->m_state.safePartialTransactionReceipts(); - if ( vecMissing ) { - assert( saved_receipts.size() == _transactions.size() - vecMissing->size() ); - } else - // NB! Not commit! Commit will be after 1st transaction! - m_state.clearPartialTransactionReceipts(); + m_state = m_state.createStateCopyAndClearCaches(); // mainly for debugging + + TransactionReceipts saved_receipts = + + m_receipts = m_state.safePartialTransactionReceipts( info().number() ); + TransactionReceipts receipts = m_receipts; + + unsigned countBad = 0; + + if ( m_receipts.size() > 0 ) { + cwarn << "Recovering from a previous crash while processing TRANSACTION:" + << m_receipts.size() << ":BLOCK:" << info().number(); + // count bad transactions in previously executed transactions + // a bad transaction is in the block but does not use any gas + u256 cumulativeGas = 0; + for ( auto const& receipt : m_receipts ) { + if ( receipt.cumulativeGasUsed() == cumulativeGas ) { + countBad++; + } + cumulativeGas = receipt.cumulativeGasUsed(); + } + } - unsigned count_bad = 0; for ( unsigned i = 0; i < _transactions.size(); ++i ) { Transaction const& tr = _transactions[i]; try { - if ( vecMissing != nullptr ) { // it's non-null only for PARTIAL CATCHUP + if ( i < saved_receipts.size() ) { + // this transaction has already been executed and we have a + // receipt for it. We do not need to execute it again + m_transactions.push_back( tr ); + m_transactionSet.insert( tr.sha3() ); + continue; + ; + } - auto iterMissing = std::find_if( vecMissing->begin(), vecMissing->end(), - [&tr]( const Transaction& trMissing ) -> bool { - return trMissing.sha3() == tr.sha3(); - } ); - if ( iterMissing == vecMissing->end() ) { - m_transactions.push_back( tr ); - m_transactionSet.insert( tr.sha3() ); - // HACK TODO We assume but don't check that accumulated receipts contain - // exactly receipts of first n txns! - m_receipts.push_back( saved_receipts[i] ); - receipts.push_back( saved_receipts[i] ); - continue; // skip this transaction, it was already executed before PARTIAL - // CATCHUP - } // if - } + // Tell skaled to fail in a middle of blog processing + // this is used in partial catchup tests + doPartialCatchupTestIfRequested( i ); + - // TODO Move this checking logic into some single place - not in execute, of course if ( !tr.isInvalid() && !tr.hasExternalGas() && tr.gasPrice() < _gasPrice ) { LOG( m_logger ) << "Transaction " << tr.sha3() << " WouldNotBeInBlock: gasPrice " << tr.gasPrice() << " < " << _gasPrice; @@ -498,15 +536,17 @@ tuple< TransactionReceipts, unsigned > Block::syncEveryone( m_receipts.push_back( null_receipt ); receipts.push_back( null_receipt ); - - ++count_bad; + // we need to record the receipt in case we crash + m_state.safeSetAndCommitPartialTransactionReceipt( + null_receipt.rlp(), info().number(), i ); + ++countBad; } continue; } ExecutionResult res = - execute( _bc.lastBlockHashes(), tr, Permanence::Committed, OnOpFunc() ); + execute( _bc.lastBlockHashes(), tr, Permanence::Committed, OnOpFunc(), i ); if ( !SkipInvalidTransactionsPatch::isEnabledInWorkingBlock() || res.excepted != TransactionException::WouldNotBeInBlock ) { @@ -514,20 +554,9 @@ tuple< TransactionReceipts, unsigned > Block::syncEveryone( // if added but bad if ( res.excepted == TransactionException::WouldNotBeInBlock ) - ++count_bad; + ++countBad; } - // - // Debug only, related SKALE-2814 partial catchup testing - // - // if ( i == 3 ) { - // std::cout << "\n\n" - // << cc::warn( "--- EXITING AS CRASH EMULATION AT TX# " ) << cc::num10( i ) - // << cc::warn( " with hash " ) << cc::info( tr.sha3().hex() ) << "\n\n\n"; - // std::cout.flush(); - //_exit( 200 ); - //} - } catch ( Exception& ex ) { ex << errinfo_transactionIndex( i ); @@ -541,8 +570,24 @@ tuple< TransactionReceipts, unsigned > Block::syncEveryone( m_state.mutableHistoricState().saveRootForBlock( m_currentBlock.number() ); #endif - m_state.releaseWriteLock(); - return make_tuple( receipts, receipts.size() - count_bad ); + // we got to the end of the block so we do not need partial transaction receipts anymore + m_state.safeRemoveAllPartialTransactionReceipts(); + + + // since we committed changes corresponding to a particular block + // we need to create a new readonly snap + LDB_CHECK( m_state.getOriginalDb() ); + m_state.getOriginalDb()->createBlockSnap( info().number() ); + + // do a simple sanity check from time to time + static uint64_t sanityCheckCounter = 0; + if ( sanityCheckCounter++ % 10000 == 0 ) { + LDB_CHECK( m_state.safePartialTransactionReceipts( info().number() ).empty() ); + } + + LDB_CHECK( receipts.size() >= countBad ); + + return make_tuple( receipts, receipts.size() - countBad ); } u256 Block::enactOn( VerifiedBlockRef const& _block, BlockChain const& _bc ) { @@ -579,7 +624,7 @@ u256 Block::enactOn( VerifiedBlockRef const& _block, BlockChain const& _bc ) { sync( _bc, _block.info.parentHash(), BlockHeader() ); resetCurrent(); - m_state = m_state.createStateModifyCopy(); + m_state = m_state.createStateCopyAndClearCaches(); #if ETH_TIMED_ENACTMENTS syncReset = t.elapsed(); @@ -624,19 +669,11 @@ u256 Block::enact( VerifiedBlockRef const& _block, BlockChain const& _bc ) { // All ok with the block generally. Play back the transactions now... unsigned i = 0; - DEV_TIMED_ABOVE( "txExec", 500 ) - for ( Transaction const& tr : _block.transactions ) { + DEV_TIMED_ABOVE( "txExec", 500 ) for ( Transaction const& tr : _block.transactions ) { try { - // cerr << "Enacting transaction: #" << tr.nonce() << " from " << tr.from() - // << " (state #" - // << state().getNonce( tr.from() ) << ") value = " << tr.value() << - // endl; const_cast< Transaction& >( tr ).checkOutExternalGas( _bc.chainParams(), _bc.info().timestamp(), _bc.number() ); - execute( _bc.lastBlockHashes(), tr ); - // cerr << "Now: " - // << "State #" << state().getNonce( tr.from() ) << endl; - // cnote << m_state; + execute( _bc.lastBlockHashes(), tr, skale::Permanence::Committed, OnOpFunc(), i ); } catch ( Exception& ex ) { ex << errinfo_transactionIndex( i ); throw; @@ -649,8 +686,7 @@ u256 Block::enact( VerifiedBlockRef const& _block, BlockChain const& _bc ) { } h256 receiptsRoot; - DEV_TIMED_ABOVE( ".receiptsRoot()", 500 ) - receiptsRoot = orderedTrieRoot( receipts ); + DEV_TIMED_ABOVE( ".receiptsRoot()", 500 ) receiptsRoot = orderedTrieRoot( receipts ); if ( receiptsRoot != m_currentBlock.receiptsRoot() ) { InvalidReceiptsStateRoot ex; @@ -853,8 +889,8 @@ ExecutionResult Block::executeHistoricCall( LastBlockHashesFace const& _lh, Tran #endif -ExecutionResult Block::execute( - LastBlockHashesFace const& _lh, Transaction const& _t, Permanence _p, OnOpFunc const& _onOp ) { +ExecutionResult Block::execute( LastBlockHashesFace const& _lh, Transaction const& _t, + Permanence _p, OnOpFunc const& _onOp, int64_t _transactionIndex ) { MICROPROFILE_SCOPEI( "Block", "execute transaction", MP_CORNFLOWERBLUE ); if ( isSealed() ) BOOST_THROW_EXCEPTION( InvalidOperationOnSealedBlock() ); @@ -863,11 +899,6 @@ ExecutionResult Block::execute( // transaction as possible. uncommitToSeal(); - // HACK! TODO! Permanence::Reverted should be passed ONLY from Client::call - because there - // startRead() is called - // TODO add here startRead! (but it clears cache - so write in Client::call() is ignored... - State stateSnapshot = - _p != Permanence::Reverted ? m_state.createStateModifyCopyAndPassLock() : m_state; EnvInfo envInfo = EnvInfo( info(), _lh, previousInfo().timestamp(), gasUsed(), m_sealEngine->chainParams().chainID ); @@ -885,8 +916,8 @@ ExecutionResult Block::execute( if ( _t.isInvalid() ) throw -1; // will catch below - resultReceipt = - stateSnapshot.execute( envInfo, m_sealEngine->chainParams(), _t, _p, _onOp ); + resultReceipt = m_state.execute( + envInfo, m_sealEngine->chainParams(), _t, _p, _onOp, _transactionIndex ); // use fake receipt created above if execution throws!! } catch ( const TransactionException& ex ) { @@ -917,8 +948,16 @@ ExecutionResult Block::execute( m_transactionSet.insert( _t.sha3() ); } } - if ( _p == Permanence::Committed || _p == Permanence::Uncommitted ) { - m_state = stateSnapshot.createStateModifyCopyAndPassLock(); + + + // if we are doing real block processing with commit, we currently clear cache + // on each transaction. This can be done safely because state changes are committed to + // disk. In other cases we do not clear cache. This is specifically handy for tests + // because we do not commit to disk in some of the tests + // In the future we can test performance of not clearing + // cache on each commit + if ( _p == Permanence::Committed ) { + m_state = m_state.createStateCopyAndClearCaches(); } return resultReceipt.first; @@ -953,7 +992,7 @@ void Block::updateBlockhashContract() { if ( blockNumber == forkBlock ) { if ( m_state.addressInUse( c_blockhashContractAddress ) ) { if ( m_state.code( c_blockhashContractAddress ) != c_blockhashContractCode ) { - State state = m_state.createStateModifyCopy(); + State state = m_state.createStateCopyAndClearCaches(); state.setCode( c_blockhashContractAddress, bytes( c_blockhashContractCode ), m_sealEngine->evmSchedule( this->m_previousBlock.timestamp(), blockNumber ) .accountVersion ); @@ -1101,9 +1140,6 @@ bool Block::sealBlock( bytesConstRef _header ) { return true; } -void Block::startReadState() { - m_state = m_state.createStateReadOnlyCopy(); -} h256 Block::stateRootBeforeTx( unsigned _i ) const { _i = min< unsigned >( _i, m_transactions.size() ); diff --git a/libethereum/Block.h b/libethereum/Block.h index 4164b73e9..249f9932d 100644 --- a/libethereum/Block.h +++ b/libethereum/Block.h @@ -216,8 +216,14 @@ class Block { /// Execute a given transaction. /// This will append @a _t to the transaction list and change the state accordingly. + /// If transaction is part of the block we pass transaction index in the block ExecutionResult execute( LastBlockHashesFace const& _lh, Transaction const& _t, - skale::Permanence _p = skale::Permanence::Committed, OnOpFunc const& _onOp = OnOpFunc() ); + skale::Permanence _p = skale::Permanence::Committed, OnOpFunc const& _onOp = OnOpFunc(), + int64_t _transactionIndex = -1 ); + + // this returns a read only copy of the block that uses + // snap-based state object + Block getReadOnlyCopy() const; #ifdef HISTORIC_STATE ExecutionResult executeHistoricCall( LastBlockHashesFace const& _lh, Transaction const& _t, @@ -232,6 +238,9 @@ class Block { std::pair< TransactionReceipts, bool > sync( BlockChain const& _bc, TransactionQueue& _tq, GasPricer const& _gp, unsigned _msTimeout = 100 ); + // this will crash skaled during after execution of a particular transaction + static void doPartialCatchupTestIfRequested( unsigned _transactionIndexWhereToCrash ); + /// Sync our state with the block chain. /// This basically involves wiping ourselves if we've been superceded and rebuilding from the /// transaction queue. @@ -246,9 +255,7 @@ class Block { /// Sync all transactions unconditionally std::tuple< TransactionReceipts, unsigned > syncEveryone( BlockChain const& _bc, - const Transactions& _transactions, uint64_t _timestamp, u256 _gasPrice, - Transactions* vecMissing = nullptr // it's non-null only for PARTIAL CATCHUP - ); + const Transactions& _transactions, uint64_t _timestamp, u256 _gasPrice ); /// Execute all transactions within a given block. /// @returns the additional total difficulty. diff --git a/libethereum/BlockChain.cpp b/libethereum/BlockChain.cpp index e2339685e..788c5454d 100644 --- a/libethereum/BlockChain.cpp +++ b/libethereum/BlockChain.cpp @@ -549,7 +549,7 @@ ImportRoute BlockChain::import( VerifiedBlockRef const& _block, State& _state, b s.cleanup(); - _state = _state.createNewCopyWithLocks(); + _state = _state.createStateCopyAndClearCaches(); totalDifficulty = pd.totalDifficulty + tdIncrease; diff --git a/libethereum/Client.cpp b/libethereum/Client.cpp index b44638e89..b266145df 100644 --- a/libethereum/Client.cpp +++ b/libethereum/Client.cpp @@ -220,20 +220,27 @@ void Client::injectSkaleHost( std::shared_ptr< SkaleHost > _skaleHost ) { } void Client::populateNewChainStateFromGenesis() { + // make sure no block processing happens while we are + // initing the state. This is probably never going to happen anyway + // since block processing happens very early in Client init + // but better safe than sorry + DEV_GUARDED( m_blockImportMutex ) #ifdef HISTORIC_STATE - m_state = m_state.createStateModifyCopy(); + m_state = m_state.createStateCopyAndClearCaches(); m_state.populateFrom( bc().chainParams().genesisState ); m_state.mutableHistoricState().saveRootForBlock( 0 ); m_state.mutableHistoricState().db().commit(); - m_state.releaseWriteLock(); #else - m_state.createStateModifyCopy().populateFrom( bc().chainParams().genesisState ); - m_state = m_state.createNewCopyWithLocks(); + m_state.populateFrom( bc().chainParams().genesisState ); + m_state = m_state.createStateCopyAndClearCaches(); #endif } void Client::initStateFromDiskOrGenesis() { + // write lock so transactions are not processed while state initialized + // state initialization happens very early at client init but better safe than sorry + DEV_WRITE_GUARDED( x_working ); #ifdef HISTORIC_STATE // Check if If the historic state databases do not yet exist bool historicStateExists = fs::exists( @@ -277,13 +284,9 @@ void Client::init( WithExisting _forceAction, u256 _networkId ) { m_bq.setChain( bc() ); m_lastGetWork = std::chrono::system_clock::now() - chrono::seconds( 30 ); - m_tqReady = m_tq.onReady( [=]() { - this->onTransactionQueueReady(); - } ); // TODO: should read m_tq->onReady(thisThread, syncTransactionQueue); + m_tqReady = m_tq.onReady( [=]() { this->onTransactionQueueReady(); } ); m_tqReplaced = m_tq.onReplaced( [=]( h256 const& ) { m_needStateReset = true; } ); - m_bqReady = m_bq.onReady( [=]() { - this->onBlockQueueReady(); - } ); // TODO: should read m_bq->onReady(thisThread, syncBlockQueue); + m_bqReady = m_bq.onReady( [=]() { this->onBlockQueueReady(); } ); m_bq.setOnBad( [=]( Exception& ex ) { this->onBadBlock( ex ); } ); bc().setOnBad( [=]( Exception& ex ) { this->onBadBlock( ex ); } ); bc().setOnBlockImport( [=]( BlockHeader const& _info ) { @@ -313,6 +316,11 @@ void Client::init( WithExisting _forceAction, u256 _networkId ) { m_snapshotAgentInited = true; } + // when we start, we create a read only State DB snap to be used in eth calls + // after that, new snaps are created after each block is processed + + m_state.createReadOnlyStateDBSnap( number() ); + SchainPatch::init( chainParams() ); SchainPatch::useLatestBlockTimestamp( blockChain().info().timestamp() ); TotalStorageUsedPatch::init( this ); @@ -506,30 +514,9 @@ void Client::syncBlockQueue() { onChainChanged( ir ); } -static std::string stat_transactions2str( - const Transactions& _transactions, const std::string& strPrefix ) { - size_t cnt = _transactions.size(); - std::string s; - if ( !strPrefix.empty() ) - s += strPrefix; - s += cc::size10( cnt ) + " " + - cc::debug( - ( cnt > 1 ) ? "transactions: " : ( ( cnt == 1 ) ? "transaction: " : "transactions" ) ); - size_t i = 0; - for ( const Transactions::value_type& tx : _transactions ) { - if ( i > 0 ) - s += cc::normal( ", " ); - s += cc::debug( "#" ) + cc::size10( i ) + cc::debug( "/" ) + cc::info( tx.sha3().hex() ); - ++i; - } - return s; -} size_t Client::importTransactionsAsBlock( const Transactions& _transactions, u256 _gasPrice, uint64_t _timestamp ) { - // HACK here was m_blockImportMutex - but now it is acquired in SkaleHost!!! - // TODO decouple Client and SkaleHost - // on schain creation, SnapshotAgent needs timestamp of block 1 // so we use this HACK // pass block number 0 as for bigger BN it is initialized in init() @@ -539,52 +526,8 @@ size_t Client::importTransactionsAsBlock( } m_snapshotAgent->finishHashComputingAndUpdateHashesIfNeeded( _timestamp ); - // begin, detect partially executed block - bool bIsPartial = false; - dev::h256 shaLastTx = m_state.safeLastExecutedTransactionHash(); - - auto iterFound = std::find_if( _transactions.begin(), _transactions.end(), - [&shaLastTx]( const Transaction& txWalk ) { return txWalk.sha3() == shaLastTx; } ); - - // detect partial ONLY if this transaction is not known! - bIsPartial = iterFound != _transactions.end() && !isKnownTransaction( shaLastTx ); - - Transactions vecPassed, vecMissing; - if ( bIsPartial ) { - vecPassed.insert( vecPassed.end(), _transactions.begin(), iterFound + 1 ); - vecMissing.insert( vecMissing.end(), iterFound + 1, _transactions.end() ); - } - - size_t cntAll = _transactions.size(); - size_t cntPassed = vecPassed.size(); - size_t cntMissing = vecMissing.size(); - size_t cntExpected = cntMissing; - if ( bIsPartial ) { - LOG( m_logger ) << cc::fatal( "PARTIAL CATCHUP DETECTED:" ) - << cc::warn( " found partially executed block, have " ) - << cc::size10( cntAll ) << cc::warn( " transaction(s), " ) - << cc::size10( cntPassed ) << cc::warn( " passed, " ) - << cc::size10( cntMissing ) << cc::warn( " missing" ); - LOG( m_logger ).flush(); - LOG( m_logger ) << cc::info( "PARTIAL CATCHUP:" ) - << stat_transactions2str( _transactions, cc::notice( " All " ) ); - LOG( m_logger ).flush(); - LOG( m_logger ) << cc::info( "PARTIAL CATCHUP:" ) - << stat_transactions2str( vecPassed, cc::notice( " Passed " ) ); - LOG( m_logger ).flush(); - LOG( m_logger ) << cc::info( "PARTIAL CATCHUP:" ) - << stat_transactions2str( vecMissing, cc::notice( " Missing " ) ); - // LOG( m_logger ) << cc::info( "PARTIAL CATCHUP:" ) << cc::attention( " Found " ) - // << cc::size10( partialTransactionReceipts.size() ) - // << cc::attention( " partial transaction receipt(s) inside " ) - // << cc::notice( "SAFETY CACHE" ); - LOG( m_logger ).flush(); - } - // end, detect partially executed block - // size_t cntSucceeded = 0; - cntSucceeded = syncTransactions( - _transactions, _gasPrice, _timestamp, bIsPartial ? &vecMissing : nullptr ); + cntSucceeded = syncTransactions( _transactions, _gasPrice, _timestamp ); sealUnconditionally( false ); importWorkingBlock(); @@ -599,45 +542,21 @@ size_t Client::importTransactionsAsBlock( } else cwarn << "Warning: UnsafeRegion still active!"; - if ( bIsPartial ) - cntSucceeded += cntPassed; - if ( cntSucceeded != cntAll ) { - LOG( m_logger ) << cc::fatal( "TX EXECUTION WARNING:" ) << cc::warn( " expected " ) - << cc::size10( cntAll ) << cc::warn( " transaction(s) to pass, when " ) - << cc::size10( cntSucceeded ) << cc::warn( " passed with success," ) - << cc::size10( cntExpected ) << cc::warn( " expected to run and pass" ); - LOG( m_logger ).flush(); - } - if ( bIsPartial ) { - LOG( m_logger ) << cc::success( "PARTIAL CATCHUP SUCCESS: with " ) << cc::size10( cntAll ) - << cc::success( " transaction(s), " ) << cc::size10( cntPassed ) - << cc::success( " passed, " ) << cc::size10( cntMissing ) - << cc::success( " missing" ); - LOG( m_logger ).flush(); - } if ( chainParams().sChain.nodeGroups.size() > 0 ) updateHistoricGroupIndex(); m_snapshotAgent->doSnapshotIfNeeded( number(), _timestamp ); - // TEMPRORARY FIX! - // TODO: REVIEW tick(); return cntSucceeded; - assert( false ); - return 0; } size_t Client::syncTransactions( - const Transactions& _transactions, u256 _gasPrice, uint64_t _timestamp, - Transactions* vecMissing // it's non-null only for PARTIAL CATCHUP -) { + const Transactions& _transactions, u256 _gasPrice, uint64_t _timestamp ) { assert( m_skaleHost ); - // HACK remove block verification and put it directly in blockchain!! - // TODO remove block verification and put it directly in blockchain!! while ( m_working.isSealed() ) { cnote << "m_working.isSealed. sleeping"; usleep( 1000 ); @@ -652,11 +571,9 @@ size_t Client::syncTransactions( DEV_WRITE_GUARDED( x_working ) { assert( !m_working.isSealed() ); - - // assert(m_state.m_db_write_lock.has_value()); tie( newPendingReceipts, goodReceipts ) = - m_working.syncEveryone( bc(), _transactions, _timestamp, _gasPrice, vecMissing ); - m_state = m_state.createNewCopyWithLocks(); + m_working.syncEveryone( bc(), _transactions, _timestamp, _gasPrice ); + m_state = m_state.createStateCopyAndClearCaches(); #ifdef HISTORIC_STATE // make sure the trie in new state object points to the new state root m_state.mutableHistoricState().setRoot( @@ -724,8 +641,7 @@ void Client::restartMining() { DEV_READ_GUARDED( x_preSeal ) newPreMine = m_preSeal; - // TODO: use m_postSeal to avoid re-evaluating our own blocks. - m_state = m_state.createNewCopyWithLocks(); + m_state = m_state.createStateCopyAndClearCaches(); preChanged = newPreMine.sync( bc(), m_state ); if ( preChanged || m_postSeal.author() != m_preSeal.author() ) { @@ -770,16 +686,9 @@ void Client::setSchainExitTime( uint64_t _timestamp ) const { } void Client::onChainChanged( ImportRoute const& _ir ) { - // ctrace << "onChainChanged()"; h256Hash changeds; onDeadBlocks( _ir.deadBlocks, changeds ); - // this should be already done in SkaleHost::createBlock() - // for ( auto const& t : _ir.goodTranactions ) { - // LOG( m_loggerDetail ) << "Safely dropping transaction " << t.sha3(); - // m_tq.dropGood( t ); - // } - onNewBlocks( _ir.liveBlocks, changeds ); if ( !isMajorSyncing() ) resyncStateFromChain(); @@ -1076,8 +985,7 @@ Block Client::blockByNumber( BlockNumber _h ) const { } // blockByNumber is only used for reads - - auto readState = m_state.createStateReadOnlyCopy(); + auto readState = m_state.createStateCopyAndClearCaches(); readState.mutableHistoricState().setRootByBlockNumber( _h ); // removed m_blockImportMutex here // this function doesn't interact with latest block so the mutex isn't needed @@ -1114,8 +1022,7 @@ TransactionSkeleton Client::populateTransactionWithDefaults( TransactionSkeleton // value used by geth and testrpc. const u256 defaultTransactionGas = 90000; if ( ret.nonce == Invalid256 ) { - Block block = postSeal(); - block.startReadState(); + Block block = getReadOnlyLatestBlockCopy(); ret.nonce = max< u256 >( block.transactionsFrom( ret.from ), m_tq.maxNonce( ret.from ) ); } if ( ret.gasPrice == Invalid256 ) @@ -1149,11 +1056,12 @@ h256 Client::submitTransaction( TransactionSkeleton const& _t, Secret const& _se TransactionSkeleton ts = populateTransactionWithDefaults( _t ); ts.from = toAddress( _secret ); Transaction t( ts, _secret ); - return importTransaction( t ); + auto result = importTransaction( t, TransactionBroadcast::BroadcastToAll ); + + return result; } -// TODO: Check whether multiTransactionMode enabled on contracts -h256 Client::importTransaction( Transaction const& _t ) { +h256 Client::importTransaction( Transaction const& _t, TransactionBroadcast _txOrigin ) { prepareForTransaction(); // Use the Executive to perform basic validation of the transaction @@ -1165,15 +1073,15 @@ h256 Client::importTransaction( Transaction const& _t ) { State state; u256 gasBidPrice; - DEV_GUARDED( m_blockImportMutex ) { - state = this->state().createStateReadOnlyCopy(); - gasBidPrice = this->gasBidPrice(); + state = this->state().createReadOnlySnapBasedCopy(); + gasBidPrice = this->gasBidPrice(); + + + // We need to check external gas under mutex to be sure about current block number + // correctness + const_cast< Transaction& >( _t ).checkOutExternalGas( + chainParams(), bc().info().timestamp(), number() ); - // We need to check external gas under mutex to be sure about current block number - // correctness - const_cast< Transaction& >( _t ).checkOutExternalGas( - chainParams(), bc().info().timestamp(), number() ); - } Executive::verifyTransaction( _t, bc().info().timestamp(), bc().number() ? this->blockInfo( bc().currentHash() ) : bc().genesis(), state, @@ -1204,6 +1112,11 @@ h256 Client::importTransaction( Transaction const& _t ) { m_new_pending_transaction_watch.invoke( _t ); + // since the transaction was received fom the user, we broadcast it + if ( _txOrigin == TransactionBroadcast::BroadcastToAll && m_skaleHost ) { + m_skaleHost->pushToBroadcastQueue( _t ); + } + return _t.sha3(); } @@ -1219,8 +1132,9 @@ ExecutionResult Client::call( Address const& _from, u256 _value, Address _dest, ExecutionResult ret; try { #ifdef HISTORIC_STATE - Block historicBlock = blockByNumber( _blockNumber ); + if ( _blockNumber < bc().number() ) { + Block historicBlock = blockByNumber( _blockNumber ); // historic state try { u256 nonce = historicBlock.mutableState().mutableHistoricState().getNonce( _from ); @@ -1247,10 +1161,8 @@ ExecutionResult Client::call( Address const& _from, u256 _value, Address _dest, } #endif - Block temp = preSeal(); + Block temp = getReadOnlyLatestBlockCopy(); - // TODO there can be race conditions between prev and next line! - State readStateForLock = temp.mutableState().createStateReadOnlyCopy(); u256 nonce = max< u256 >( temp.transactionsFrom( _from ), m_tq.maxNonce( _from ) ); // if the user did not specify transaction gas limit, we give transaction block gas // limit of gas diff --git a/libethereum/Client.h b/libethereum/Client.h index 468aec177..e9f423bbc 100644 --- a/libethereum/Client.h +++ b/libethereum/Client.h @@ -119,7 +119,9 @@ class Client : public ClientBase, protected Worker { h256 submitTransaction( TransactionSkeleton const& _t, Secret const& _secret ) override; /// Imports the given transaction into the transaction queue - h256 importTransaction( Transaction const& _t ) override; + h256 importTransaction( Transaction const& _t, + TransactionBroadcast _txOrigin = TransactionBroadcast::DontBroadcast ) override; + /// Makes the given call. Nothing is recorded into the state. ExecutionResult call( Address const& _secret, u256 _value, Address _dest, bytes const& _data, @@ -370,9 +372,7 @@ class Client : public ClientBase, protected Worker { /// returns number of successfullty executed transactions /// thread unsafe!! size_t syncTransactions( const Transactions& _transactions, u256 _gasPrice, - uint64_t _timestamp = ( uint64_t ) utcTime(), - Transactions* vecMissing = nullptr // it's non-null only for PARTIAL CATCHUP - ); + uint64_t _timestamp = ( uint64_t ) utcTime() ); /// As rejigSealing - but stub /// thread unsafe!! @@ -395,6 +395,10 @@ class Client : public ClientBase, protected Worker { ReadGuard l( x_preSeal ); return m_preSeal; } + + // get read only latest block copy + Block getReadOnlyLatestBlockCopy() const { return m_postSeal.getReadOnlyCopy(); } + Block postSeal() const override { ReadGuard l( x_postSeal ); return m_postSeal; diff --git a/libethereum/ClientBase.cpp b/libethereum/ClientBase.cpp index 200fb295f..f17a2022e 100644 --- a/libethereum/ClientBase.cpp +++ b/libethereum/ClientBase.cpp @@ -40,6 +40,7 @@ using namespace dev::eth; using skale::Permanence; using skale::State; + static const int64_t c_maxGasEstimate = 50000000; ClientWatch::ClientWatch() : lastPoll( std::chrono::system_clock::now() ) {} @@ -79,6 +80,7 @@ void ClientWatch::append_changes( const LocalisedLogEntry& entry ) { fnOnNewChanges_( iw_ ); } + std::pair< bool, ExecutionResult > ClientBase::estimateGasStep( int64_t _gas, Block& _latestBlock, Block& _pendingBlock, Address const& _from, Address const& _destination, u256 const& _value, u256 const& _gasPrice, bytes const& _data ) { @@ -178,29 +180,6 @@ ImportResult ClientBase::injectBlock( bytes const& _block ) { return bc().attemptImport( _block, preSeal().mutableState() ).first; } -u256 ClientBase::balanceAt( Address _a ) const { - return latestBlock().balance( _a ); -} - -u256 ClientBase::countAt( Address _a ) const { - return latestBlock().transactionsFrom( _a ); -} - -u256 ClientBase::stateAt( Address _a, u256 _l ) const { - return latestBlock().storage( _a, _l ); -} - -bytes ClientBase::codeAt( Address _a ) const { - return latestBlock().code( _a ); -} - -h256 ClientBase::codeHashAt( Address _a ) const { - return latestBlock().codeHash( _a ); -} - -map< h256, pair< u256, u256 > > ClientBase::storageAt( Address _a ) const { - return latestBlock().storage( _a ); -} // TODO: remove try/catch, allow exceptions LocalisedLogEntries ClientBase::logs( unsigned _watchId ) const { @@ -585,10 +564,34 @@ bool ClientBase::isKnownTransaction( h256 const& _blockHash, unsigned _i ) const Block ClientBase::latestBlock() const { Block res = postSeal(); - res.startReadState(); return res; } uint64_t ClientBase::chainId() const { return bc().chainParams().chainID; } + + +u256 ClientBase::countAt( Address _a ) const { + return getReadOnlyLatestBlockCopy().state().getNonce( _a ); +} + +u256 ClientBase::balanceAt( Address _a ) const { + return getReadOnlyLatestBlockCopy().state().balance( _a ); +} + +u256 ClientBase::stateAt( Address _a, u256 _l ) const { + return getReadOnlyLatestBlockCopy().state().storage( _a, _l ); +} + +bytes ClientBase::codeAt( Address _a ) const { + return getReadOnlyLatestBlockCopy().state().code( _a ); +} + +h256 ClientBase::codeHashAt( Address _a ) const { + return getReadOnlyLatestBlockCopy().state().codeHash( _a ); +} + +map< h256, pair< u256, u256 > > ClientBase::storageAt( Address _a ) const { + return getReadOnlyLatestBlockCopy().state().storage( _a ); +} diff --git a/libethereum/ClientBase.h b/libethereum/ClientBase.h index 2790b4ee3..f6766c017 100644 --- a/libethereum/ClientBase.h +++ b/libethereum/ClientBase.h @@ -77,6 +77,7 @@ struct ClientWatch { bool isWS() const { return isWS_; }; }; + class ClientBase : public Interface { public: class CreationException : public std::exception { @@ -86,20 +87,6 @@ class ClientBase : public Interface { ClientBase() {} virtual ~ClientBase() {} - /// Estimate gas usage for call/create. - /// @param _maxGas An upper bound value for estimation, if not provided default value of - /// c_maxGasEstimate will be used. - /// @param _callback Optional callback function for progress reporting - std::pair< u256, ExecutionResult > estimateGas( Address const& _from, u256 _value, - Address _dest, bytes const& _data, int64_t _maxGas, u256 _gasPrice, - GasEstimationCallback const& _callback = GasEstimationCallback() ) override; - - u256 balanceAt( Address _a ) const override; - u256 countAt( Address _a ) const override; - u256 stateAt( Address _a, u256 _l ) const override; - bytes codeAt( Address _a ) const override; - h256 codeHashAt( Address _a ) const override; - std::map< h256, std::pair< u256, u256 > > storageAt( Address _a ) const override; LocalisedLogEntries logs( unsigned _watchId ) const override; LocalisedLogEntries logs( LogFilter const& _filter ) const override; @@ -196,7 +183,22 @@ class ClientBase : public Interface { uint64_t chainId() const override; + u256 countAt( Address _a ) const override; + u256 balanceAt( Address _a ) const override; + u256 stateAt( Address _a, u256 _l ) const override; + bytes codeAt( Address _a ) const override; + h256 codeHashAt( Address _a ) const override; + std::map< h256, std::pair< u256, u256 > > storageAt( Address _a ) const override; + std::pair< u256, ExecutionResult > estimateGas( Address const& _from, u256 _value, + Address _dest, bytes const& _data, int64_t _maxGas, u256 _gasPrice, + GasEstimationCallback const& _callback = GasEstimationCallback() ) override; + protected: + + std::pair< bool, ExecutionResult > estimateGasStep( int64_t _gas, Block& _latestBlock, + Block& _pendingBlock, Address const& _from, Address const& _destination, u256 const& _value, + u256 const& _gasPrice, bytes const& _data ); + /// The interface that must be implemented in any class deriving this. /// { virtual BlockChain& bc() = 0; @@ -219,11 +221,11 @@ class ClientBase : public Interface { Logger m_loggerWatch{ createLogger( VerbosityDebug, "watch" ) }; -private: - std::pair< bool, ExecutionResult > estimateGasStep( int64_t _gas, Block& _latestBlock, - Block& _pendingBlock, Address const& _from, Address const& _destination, u256 const& _value, - u256 const& _gasPrice, bytes const& _data ); + + // get read only latest block copy + Block getReadOnlyLatestBlockCopy() const { return postSeal().getReadOnlyCopy(); } }; + } // namespace eth } // namespace dev diff --git a/libethereum/ClientTest.h b/libethereum/ClientTest.h index f80023031..c58aeb76f 100644 --- a/libethereum/ClientTest.h +++ b/libethereum/ClientTest.h @@ -52,7 +52,7 @@ class ClientTest : public Client { h256 importRawBlock( std::string const& _blockRLP ); protected: - unsigned const m_singleBlockMaxMiningTimeInSeconds = 5; + unsigned const m_singleBlockMaxMiningTimeInSeconds = 10; }; ClientTest& asClientTest( Interface& _c ); diff --git a/libethereum/Interface.h b/libethereum/Interface.h index 018ccb934..f0ae1090a 100644 --- a/libethereum/Interface.h +++ b/libethereum/Interface.h @@ -59,6 +59,10 @@ using fnClientWatchHandlerMulti_t = skutils::multifunction< void( unsigned iw ) /** * @brief Main API hub for interfacing with Ethereum. */ + + +enum TransactionBroadcast { BroadcastToAll, DontBroadcast }; + class Interface { public: /// Constructor. @@ -79,7 +83,7 @@ class Interface { u256 const& _gasPrice = DefaultGasPrice, u256 const& _nonce = Invalid256 ); /// Imports the given transaction into the transaction queue - virtual h256 importTransaction( Transaction const& _t ) = 0; + virtual h256 importTransaction( Transaction const& _t, TransactionBroadcast _txOrigin ) = 0; /// Blocks until all pending transactions have been processed. virtual void flushTransactions() = 0; diff --git a/libethereum/SkaleHost.cpp b/libethereum/SkaleHost.cpp index 0f925c7bb..b66d70bac 100644 --- a/libethereum/SkaleHost.cpp +++ b/libethereum/SkaleHost.cpp @@ -55,7 +55,6 @@ using namespace std; #include #include -#include #include using namespace dev; @@ -267,10 +266,6 @@ SkaleHost::SkaleHost( dev::eth::Client& _client, const ConsensusFactory* _consFa }; m_debugTracer.call_on_tracepoint( [this]( const std::string& name ) { - skutils::task::performance::action action( - "trace/" + name, std::to_string( m_debugTracer.get_tracepoint_count( name ) ) ); - - // HACK reduce TRACEPOINT log output static uint64_t last_block_when_log = -1; if ( name == "fetch_transactions" || name == "drop_bad_transactions" ) { uint64_t current_block = this->m_client.number(); @@ -323,11 +318,28 @@ SkaleHost::~SkaleHost() {} void SkaleHost::logState() { LOG( m_traceLogger ) << cc::debug( " sent_to_consensus = " ) << total_sent << cc::debug( " got_from_consensus = " ) << total_arrived - << cc::debug( " m_transaction_cache = " ) << m_m_transaction_cache.size() << cc::debug( " m_tq = " ) << m_tq.status().current << cc::debug( " m_bcast_counter = " ) << m_bcast_counter; } +constexpr uint64_t MAX_BROADCAST_QUEUE_SIZE = 2048; + +void SkaleHost::pushToBroadcastQueue( const Transaction& _t ) { + { + std::lock_guard< std::mutex > lock( m_broadcastQueueMutex ); + this->m_broadcastQueue.push_back( _t ); + // normally broadcast queue will never be large since + // it is an intermediate queue on the way to zeromq + // and zeromq writes do not block + // we still keep its size limited + while ( m_broadcastQueue.size() > MAX_BROADCAST_QUEUE_SIZE ) { + // behavior on overflow similar to ZeroMQ - erase the latest + m_broadcastQueue.erase( m_broadcastQueue.begin() ); + } + } + m_broadcastQueueCondition.notify_all(); // Notify the condition variable +} + h256 SkaleHost::receiveTransaction( std::string _rlp ) { // drop incoming transactions if skaled has an outdated state if ( m_client.bc().info().timestamp() + REJECT_OLD_TRANSACTION_THROUGH_BROADCAST_INTERVAL_SEC < @@ -340,25 +352,14 @@ h256 SkaleHost::receiveTransaction( std::string _rlp ) { EIP1559TransactionsPatch::isEnabledInWorkingBlock() ); h256 sha = transaction.sha3(); - // - static std::atomic_size_t g_nReceiveTransactionsTaskNumber = 0; - size_t nReceiveTransactionsTaskNumber = g_nReceiveTransactionsTaskNumber++; - std::string strPerformanceQueueName = "bc/receive_transaction"; - std::string strPerformanceActionName = - skutils::tools::format( "receive task %zu", nReceiveTransactionsTaskNumber ); - skutils::task::performance::action a( strPerformanceQueueName, strPerformanceActionName ); // m_debugTracer.tracepoint( "receive_transaction" ); - { - std::lock_guard< std::mutex > localGuard( m_receivedMutex ); - m_received.insert( sha ); - LOG( m_debugLogger ) << "m_received = " << m_received.size() << std::endl; - } + #if ( defined _DEBUG ) h256 sha2 = #endif - m_client.importTransaction( transaction ); + m_client.importTransaction( transaction, TransactionBroadcast::DontBroadcast ); #if ( defined _DEBUG ) assert( sha == sha2 ); #endif @@ -366,6 +367,7 @@ h256 SkaleHost::receiveTransaction( std::string _rlp ) { m_debugTracer.tracepoint( "receive_transaction_success" ); LOG( m_debugLogger ) << "Successfully received through broadcast " << sha; + return sha; } @@ -415,23 +417,10 @@ ConsensusExtFace::transactions_vector SkaleHost::pendingTransactions( MICROPROFILE_SCOPEI( "SkaleHost", "pendingTransactions", MP_LAWNGREEN ); - _stateRoot = dev::h256::Arith( this->m_client.latestBlock().info().stateRoot() ); + _stateRoot = dev::h256::Arith( m_client.getReadOnlyLatestBlockCopy().info().stateRoot() ); h256Hash to_delete; - // - static std::atomic_size_t g_nFetchTransactionsTaskNumber = 0; - size_t nFetchTransactionsTaskNumber = g_nFetchTransactionsTaskNumber++; - std::string strPerformanceQueueName_fetch_transactions = "bc/fetch_transactions"; - std::string strPerformanceActionName_fetch_transactions = - skutils::tools::format( "fetch task %zu", nFetchTransactionsTaskNumber ); - skutils::task::performance::json jsn = skutils::task::performance::json::object(); - jsn["limit"] = toJS( _limit ); - jsn["stateRoot"] = toJS( _stateRoot ); - skutils::task::performance::action a_fetch_transactions( - strPerformanceQueueName_fetch_transactions, strPerformanceActionName_fetch_transactions, - jsn ); - // m_debugTracer.tracepoint( "fetch_transactions" ); int counter = 0; @@ -439,36 +428,27 @@ ConsensusExtFace::transactions_vector SkaleHost::pendingTransactions( Transactions txns = m_tq.topTransactionsSync( _limit, [this, &to_delete, &counter, &latestInfo]( const Transaction& tx ) -> bool { - if ( m_tq.getCategory( tx.sha3() ) != 1 ) // take broadcasted - return false; - // XXX TODO Invent good way to do this if ( counter++ == 0 ) m_pending_createMutex.lock(); - if ( tx.verifiedOn < m_lastBlockWithBornTransactions ) - try { - bool isMtmEnabled = m_client.chainParams().sChain.multiTransactionMode; - Executive::verifyTransaction( tx, latestInfo.timestamp(), latestInfo, - m_client.state().createStateReadOnlyCopy(), m_client.chainParams(), 0, - getGasPrice(), isMtmEnabled ); - } catch ( const exception& ex ) { - if ( to_delete.count( tx.sha3() ) == 0 ) - clog( VerbosityInfo, "skale-host" ) - << "Dropped now-invalid transaction in pending queue " << tx.sha3() - << ":" << ex.what(); - to_delete.insert( tx.sha3() ); - return false; - } + try { + bool isMtmEnabled = m_client.chainParams().sChain.multiTransactionMode; + Executive::verifyTransaction( tx, latestInfo.timestamp(), latestInfo, + m_client.state().createReadOnlySnapBasedCopy(), m_client.chainParams(), 0, + getGasPrice(), isMtmEnabled ); + } catch ( const exception& ex ) { + if ( to_delete.count( tx.sha3() ) == 0 ) + clog( VerbosityInfo, "skale-host" ) + << "Dropped now-invalid transaction in pending queue " << tx.sha3() << ":" + << ex.what(); + to_delete.insert( tx.sha3() ); + return false; + } return true; } ); - - // - a_fetch_transactions.finish(); - // - if ( counter++ == 0 ) m_pending_createMutex.lock(); @@ -487,28 +467,6 @@ ConsensusExtFace::transactions_vector SkaleHost::pendingTransactions( m_debugTracer.tracepoint( "drop_bad_transactions" ); - { - std::lock_guard< std::mutex > localGuard( m_receivedMutex ); - // - static std::atomic_size_t g_nDropBadTransactionsTaskNumber = 0; - size_t nDropBadTransactionsTaskNumber = g_nDropBadTransactionsTaskNumber++; - std::string strPerformanceQueueName_drop_bad_transactions = "bc/fetch_transactions"; - std::string strPerformanceActionName_drop_bad_transactions = - skutils::tools::format( "fetch task %zu", nDropBadTransactionsTaskNumber ); - - skutils::task::performance::action a_drop_bad_transactions( - strPerformanceQueueName_drop_bad_transactions, - strPerformanceActionName_drop_bad_transactions, jsn ); - // - for ( auto sha : to_delete ) { - m_debugTracer.tracepoint( "drop_bad" ); - m_tq.drop( sha ); - if ( m_received.count( sha ) != 0 ) - m_received.erase( sha ); - LOG( m_debugLogger ) << "m_received = " << m_received.size() << std::endl; - } - } - if ( this->emptyBlockIntervalMsForRestore.has_value() ) need_restore_emptyBlockInterval = true; @@ -521,13 +479,6 @@ ConsensusExtFace::transactions_vector SkaleHost::pendingTransactions( h256 sha = txn.sha3(); - if ( m_m_transaction_cache.find( sha.asArray() ) != m_m_transaction_cache.cend() ) - m_debugTracer.tracepoint( "sent_txn_again" ); - else { - m_debugTracer.tracepoint( "sent_txn_new" ); - m_m_transaction_cache[sha.asArray()] = txn; - } - out_vector.push_back( txn.toBytes() ); ++total_sent; @@ -563,21 +514,8 @@ ConsensusExtFace::transactions_vector SkaleHost::pendingTransactions( void SkaleHost::createBlock( const ConsensusExtFace::transactions_vector& _approvedTransactions, uint64_t _timeStamp, uint64_t _blockID, u256 _gasPrice, u256 _stateRoot, uint64_t _winningNodeIndex ) try { - // boost::chrono::high_resolution_clock::time_point skaledTimeStart; skaledTimeStart = boost::chrono::high_resolution_clock::now(); - static std::atomic_size_t g_nCreateBlockTaskNumber = 0; - size_t nCreateBlockTaskNumber = g_nCreateBlockTaskNumber++; - std::string strPerformanceQueueName_create_block = "bc/create_block"; - std::string strPerformanceActionName_create_block = - skutils::tools::format( "b-create %zu", nCreateBlockTaskNumber ); - skutils::task::performance::json jsn_create_block = skutils::task::performance::json::object(); - jsn_create_block["blockID"] = toJS( _blockID ); - jsn_create_block["timeStamp"] = toJS( _timeStamp ); - jsn_create_block["gasPrice"] = toJS( _gasPrice ); - jsn_create_block["stateRoot"] = toJS( _stateRoot ); - skutils::task::performance::action a_create_block( strPerformanceQueueName_create_block, - strPerformanceActionName_create_block, jsn_create_block ); std::lock_guard< std::recursive_mutex > lock( m_pending_createMutex ); @@ -624,10 +562,6 @@ void SkaleHost::createBlock( const ConsensusExtFace::transactions_vector& _appro std::vector< Transaction > out_txns; // resultant Transaction vector - std::atomic_bool haveConsensusBorn = false; // means we need to re-verify old txns - - // HACK this is for not allowing new transactions in tq between deletion and block creation! - // TODO decouple SkaleHost and Client!!! size_t n_succeeded; BlockHeader latestInfo = static_cast< const Interface& >( m_client ).blockInfo( LatestBlock ); @@ -635,76 +569,42 @@ void SkaleHost::createBlock( const ConsensusExtFace::transactions_vector& _appro DEV_GUARDED( m_client.m_blockImportMutex ) { m_debugTracer.tracepoint( "drop_good_transactions" ); - skutils::task::performance::json jarrProcessedTxns = - skutils::task::performance::json::array(); for ( auto it = _approvedTransactions.begin(); it != _approvedTransactions.end(); ++it ) { const bytes& data = *it; h256 sha = sha3( data ); LOG( m_traceLogger ) << "Arrived txn: " << sha; - jarrProcessedTxns.push_back( toJS( sha ) ); -#ifdef DEBUG_TX_BALANCE - if ( sent.count( sha ) != m_transaction_cache.count( sha.asArray() ) ) { - LOG( m_errorLogger ) << "createBlock assert"; - // sleep(200); - assert( sent.count( sha ) == m_transaction_cache.count( sha.asArray() ) ); - } - assert( arrived.count( sha ) == 0 ); - arrived.insert( sha ); -#endif - // if already known - // TODO clear occasionally this cache?! - if ( m_m_transaction_cache.find( sha.asArray() ) != m_m_transaction_cache.cend() ) { - Transaction t = m_m_transaction_cache.at( sha.asArray() ); - t.checkOutExternalGas( - m_client.chainParams(), latestInfo.timestamp(), m_client.number() ); - out_txns.push_back( t ); - LOG( m_debugLogger ) << "Dropping good txn " << sha << std::endl; - m_debugTracer.tracepoint( "drop_good" ); - m_tq.dropGood( t ); - MICROPROFILE_SCOPEI( "SkaleHost", "erase from caches", MP_GAINSBORO ); - m_m_transaction_cache.erase( sha.asArray() ); - std::lock_guard< std::mutex > localGuard( m_receivedMutex ); - m_received.erase( sha ); - LOG( m_debugLogger ) << "m_received = " << m_received.size() << std::endl; - // for test std::thread( [t, this]() { m_client.importTransaction( t ); } - // ).detach(); - } else { - Transaction t( data, CheckTransaction::Everything, true, - EIP1559TransactionsPatch::isEnabledInWorkingBlock() ); - t.checkOutExternalGas( - m_client.chainParams(), latestInfo.timestamp(), m_client.number() ); - out_txns.push_back( t ); - LOG( m_debugLogger ) << "Will import consensus-born txn"; - m_debugTracer.tracepoint( "import_consensus_born" ); - haveConsensusBorn = true; - } - if ( m_tq.knownTransactions().count( sha ) != 0 ) { - LOG( m_traceLogger ) - << "Consensus returned future transaction that we didn't yet send"; - m_debugTracer.tracepoint( "import_future" ); + Transaction t( data, CheckTransaction::Everything, true, + EIP1559TransactionsPatch::isEnabledInWorkingBlock() ); + t.checkOutExternalGas( + m_client.chainParams(), latestInfo.timestamp(), m_client.number() ); + + if ( !ExternalGasPatch::isEnabledWhen( latestInfo.timestamp() ) ) { + auto hash = t.sha3(); + if ( m_client.m_tq.isTransactionKnown( hash ) ) { + // if a transaction is in the pending queue + // do checkOutExternal gas twice to repeat incorrect behavior that + // existed before the patch + t.checkOutExternalGas( + m_client.chainParams(), latestInfo.timestamp(), m_client.number() ); + } } - } // for - // TODO Monitor somehow m_transaction_cache and delete long-lasting elements? + out_txns.push_back( t ); + m_debugTracer.tracepoint( "drop_good" ); + m_tq.dropGood( t ); + } total_arrived += out_txns.size(); - assert( _blockID == m_client.number() + 1 ); - - // - a_create_block.finish(); - // - static std::atomic_size_t g_nImportBlockTaskNumber = 0; - size_t nImportBlockTaskNumber = g_nImportBlockTaskNumber++; - std::string strPerformanceQueueName_import_block = "bc/import_block"; - std::string strPerformanceActionName_import_block = - skutils::tools::format( "b-import %zu", nImportBlockTaskNumber ); - skutils::task::performance::action a_import_block( - strPerformanceQueueName_import_block, strPerformanceActionName_import_block ); - // + if ( _blockID != m_client.number() + 1 ) { + LOG( m_errorLogger ) << "Mismatch in block number:SKALED_NUMBER:" << m_client.number() + << ":CONSENSUS_NUMBER:" << _blockID; + assert( false ); + } + m_debugTracer.tracepoint( "import_block" ); n_succeeded = m_client.importTransactionsAsBlock( out_txns, _gasPrice, _timeStamp ); @@ -735,9 +635,6 @@ void SkaleHost::createBlock( const ConsensusExtFace::transactions_vector& _appro LOG( m_debugLogger ) << "Successfully imported " << n_succeeded << " of " << out_txns.size() << " transactions"; - if ( haveConsensusBorn ) - this->m_lastBlockWithBornTransactions = _blockID; - logState(); LOG( m_infoLogger ) << "TQBYTES:CTQ:" << m_tq.status().currentBytes @@ -754,6 +651,8 @@ void SkaleHost::createBlock( const ConsensusExtFace::transactions_vector& _appro LOG( m_infoLogger ) << "Rotation is completed. Instance is exiting"; } } + + } catch ( const std::exception& ex ) { LOG( m_errorLogger ) << "CRITICAL " << ex.what() << " (in createBlock)"; LOG( m_errorLogger ) << "\n" << skutils::signal::generate_stack_trace() << "\n"; @@ -871,58 +770,48 @@ void SkaleHost::stopWorking() { void SkaleHost::broadcastFunc() { dev::setThreadName( "broadcastFunc" ); - size_t nBroadcastTaskNumber = 0; while ( !m_exitNeeded ) { try { - m_broadcaster->broadcast( "" ); // HACK this is just to initialize sockets - - dev::eth::Transactions txns = m_tq.topTransactionsSync( 1, 0, 1 ); - if ( txns.empty() ) // means timeout - continue; + m_broadcaster->initSocket(); this->logState(); MICROPROFILE_SCOPEI( "SkaleHost", "broadcastFunc", MP_BISQUE ); - assert( txns.size() == 1 ); - Transaction& txn = txns[0]; - h256 sha = txn.sha3(); - // TODO XXX such blocks are bad :( - size_t received; + // Wait for the queue to have transactions + + static auto MAX_WAIT_TIME = std::chrono::milliseconds( 100 ); + + std::list< Transaction > queueCopy; + { - std::lock_guard< std::mutex > lock( m_receivedMutex ); - received = m_received.count( sha ); + std::unique_lock< std::mutex > lock( m_broadcastQueueMutex ); + + m_broadcastQueueCondition.wait_for( lock, MAX_WAIT_TIME ); + + + if ( m_broadcastPauseFlag ) { + continue; + } + + queueCopy = m_broadcastQueue; + m_broadcastQueue = std::list< Transaction >(); } - if ( received == 0 ) { + + for ( auto&& txn : queueCopy ) { try { - if ( !m_broadcastPauseFlag ) { - MICROPROFILE_SCOPEI( - "SkaleHost", "broadcastFunc.broadcast", MP_CHARTREUSE1 ); - std::string rlp = toJS( txn.toBytes() ); - std::string h = toJS( txn.sha3() ); - // - std::string strPerformanceQueueName = "bc/broadcast"; - std::string strPerformanceActionName = - skutils::tools::format( "broadcast %zu", nBroadcastTaskNumber++ ); - skutils::task::performance::json jsn = - skutils::task::performance::json::object(); - jsn["hash"] = h; - skutils::task::performance::action a( - strPerformanceQueueName, strPerformanceActionName, jsn ); - // - m_debugTracer.tracepoint( "broadcast" ); - m_broadcaster->broadcast( rlp ); - } + MICROPROFILE_SCOPEI( "SkaleHost", "broadcastFunc.broadcast", MP_CHARTREUSE1 ); + std::string rlp = toJS( txn.toBytes() ); + std::string h = toJS( txn.sha3() ); + m_debugTracer.tracepoint( "broadcast" ); + m_broadcaster->broadcast( rlp ); } catch ( const std::exception& ex ) { cwarn << "BROADCAST EXCEPTION CAUGHT"; cwarn << ex.what(); } // catch - - } // if - else - m_debugTracer.tracepoint( "broadcast_already_have" ); + } ++m_bcast_counter; diff --git a/libethereum/SkaleHost.h b/libethereum/SkaleHost.h index 598bf47ad..f99e70294 100644 --- a/libethereum/SkaleHost.h +++ b/libethereum/SkaleHost.h @@ -122,6 +122,8 @@ class SkaleHost { dev::h256 receiveTransaction( std::string ); + void pushToBroadcastQueue( const dev::eth::Transaction& _transaction ); + dev::u256 getGasPrice( unsigned _blockNumber = dev::eth::LatestBlock ) const; dev::u256 getBlockRandom() const; dev::eth::SyncStatus syncStatus() const; @@ -172,8 +174,11 @@ class SkaleHost { std::thread m_broadcastThread; void broadcastFunc(); - dev::h256Hash m_received; - std::mutex m_receivedMutex; + + + list< dev::eth::Transaction > m_broadcastQueue; + std::mutex m_broadcastQueueMutex; + std::condition_variable m_broadcastQueueCondition; // TODO implement more nicely and more fine-grained! std::recursive_mutex m_pending_createMutex; // for race conditions between @@ -183,8 +188,6 @@ class SkaleHost { void penalizePeer(){}; // fake function for now - int64_t m_lastBlockWithBornTransactions = -1; // to track txns need re-verification - std::thread m_consensusThread; std::atomic_bool m_exitNeeded = false; @@ -193,9 +196,6 @@ class SkaleHost { std::atomic_bool m_consensusPaused = false; std::atomic_bool m_broadcastPauseFlag = false; // not pause - just ignore - std::map< std::array< uint8_t, 32 >, dev::eth::Transaction > - m_m_transaction_cache; // used to find Transaction objects when - // creating block dev::eth::Client& m_client; dev::eth::TransactionQueue& m_tq; // transactions ready to go to consensus diff --git a/libethereum/TransactionQueue.cpp b/libethereum/TransactionQueue.cpp index 16e726e76..8ac11585d 100644 --- a/libethereum/TransactionQueue.cpp +++ b/libethereum/TransactionQueue.cpp @@ -173,41 +173,33 @@ Transactions TransactionQueue::topTransactions_WITH_LOCK( _limit, [&]( const Transaction& t ) -> bool { return _avoid.count( t.sha3() ) == 0; } ); } -Transactions TransactionQueue::topTransactions( - unsigned _limit, int _maxCategory, int _setCategory ) { +Transactions TransactionQueue::topTransactions( unsigned _limit ) { ReadGuard l( m_lock ); - return topTransactions_WITH_LOCK( _limit, _maxCategory, _setCategory ); + return topTransactions_WITH_LOCK( _limit ); } -Transactions TransactionQueue::topTransactions_WITH_LOCK( - unsigned _limit, int _maxCategory, int _setCategory ) { +Transactions TransactionQueue::topTransactions_WITH_LOCK( unsigned _limit ) { MICROPROFILE_SCOPEI( "TransactionQueue", "topTransactions_WITH_LOCK_cat", MP_PAPAYAWHIP ); Transactions top_transactions; std::vector< PriorityQueue::node_type > found; VerifiedTransaction dummy = VerifiedTransaction( Transaction() ); - dummy.category = _maxCategory; - PriorityQueue::iterator my_begin = m_current.lower_bound( dummy ); - for ( PriorityQueue::iterator transaction_ptr = my_begin; + for ( PriorityQueue::iterator transaction_ptr = m_current.begin(); top_transactions.size() < _limit && transaction_ptr != m_current.end(); ++transaction_ptr ) { top_transactions.push_back( transaction_ptr->transaction ); - if ( _setCategory >= 0 ) { - found.push_back( m_current.extract( transaction_ptr ) ); - } + found.push_back( m_current.extract( transaction_ptr ) ); } // set all at once - if ( _setCategory >= 0 ) { - for ( PriorityQueue::node_type& queue_node : found ) { - queue_node.value().category = _setCategory; - m_current.insert( std::move( queue_node ) ); - } + for ( PriorityQueue::node_type& queue_node : found ) { + m_current.insert( std::move( queue_node ) ); } + // HACK For IS-348 auto saved_txns = top_transactions; std::stable_sort( top_transactions.begin(), top_transactions.end(), @@ -230,6 +222,17 @@ Transactions TransactionQueue::topTransactions_WITH_LOCK( return top_transactions; } +// note - this function is currently only used when tracing is enabled +bool TransactionQueue::isTransactionKnown( h256& _hash ) const { + h256Hash rv; + { // block + ReadGuard l( m_lock ); + return m_known.count( _hash ) > 0; + } +} + + +// note - this function is heavy and is only used in tests const h256Hash TransactionQueue::knownTransactions() const { h256Hash rv; { // block @@ -313,7 +316,7 @@ u256 TransactionQueue::maxCurrentNonce_WITH_LOCK( Address const& _a ) const { void TransactionQueue::insertCurrent_WITH_LOCK( std::pair< h256, Transaction > const& _p ) { if ( m_currentByHash.count( _p.first ) ) { - cwarn << "Transaction hash" << _p.first << "already in current?!"; + cwarn << "Transaction hash" << _p.first << "already in current"; return; } @@ -406,6 +409,7 @@ void TransactionQueue::setFuture_WITH_LOCK( h256 const& _txHash ) { } } +// Note - this function is only used for tests void TransactionQueue::setFuture( h256 const& _txHash ) { WriteGuard l( m_lock ); return setFuture_WITH_LOCK( _txHash ); diff --git a/libethereum/TransactionQueue.h b/libethereum/TransactionQueue.h index d089c4004..827935f37 100644 --- a/libethereum/TransactionQueue.h +++ b/libethereum/TransactionQueue.h @@ -97,8 +97,6 @@ class TransactionQueue { /// @param _txHash Transaction hash void drop( h256 const& _txHash ); - int getCategory( const h256& hash ) { return m_currentByHash[hash]->category; } - /// Get number of pending transactions for account. /// @returns Pending transaction count. unsigned waiting( Address const& _a ) const; @@ -111,7 +109,7 @@ class TransactionQueue { Transactions topTransactions( unsigned _limit, h256Hash const& _avoid = h256Hash() ) const; // same with categories - Transactions topTransactions( unsigned _limit, int _maxCategory = 0, int _setCategory = -1 ); + Transactions topTransactions( unsigned _limit ); // generalization of previous template < class Pred > @@ -127,8 +125,12 @@ class TransactionQueue { /// Get a hash set of transactions in the queue /// @returns A hash set of all transactions in the queue + // this is really heavy operation and should be used with caution const h256Hash knownTransactions() const; + // Check if transaction is in the queue + bool isTransactionKnown( h256& _hash ) const; + /// Get max nonce for an account /// @returns Max transaction nonce for account in the queue u256 maxNonce( Address const& _a ) const; @@ -211,7 +213,6 @@ class TransactionQueue { VerifiedTransaction& operator=( VerifiedTransaction const& ) = delete; Transaction transaction; ///< Transaction data - int category = 0; // for sorting Counter< VerifiedTransaction > c; @@ -253,17 +254,15 @@ class TransactionQueue { /// Compare transaction by nonce height and gas price. bool operator()( VerifiedTransaction const& _first, VerifiedTransaction const& _second ) const { - int cat1 = _first.category; - int cat2 = _second.category; - // HACK special case for "dummy" transaction - it is always to the left of others with // the same category + if ( !_first.transaction && _second.transaction ) - return cat1 >= cat2; + return false; else if ( _first.transaction && !_second.transaction ) - return cat1 > cat2; + return true; else if ( !_first.transaction && !_second.transaction ) - return cat1 < cat2; + return false; u256 const& height1 = _first.transaction.nonce() - @@ -273,11 +272,9 @@ class TransactionQueue { _second.transaction.nonce() - queue.m_currentByAddressAndNonce[_second.transaction.sender()].begin()->first; - return cat1 > cat2 || - ( cat1 == cat2 && - ( height1 < height2 || - ( height1 == height2 && - _first.transaction.gasPrice() > _second.transaction.gasPrice() ) ) ); + return ( height1 < height2 || + ( height1 == height2 && + _first.transaction.gasPrice() > _second.transaction.gasPrice() ) ); } }; @@ -295,8 +292,7 @@ class TransactionQueue { unsigned _limit, h256Hash const& _avoid = h256Hash() ) const; template < class Pred > Transactions topTransactions_WITH_LOCK( unsigned _limit, Pred _pred ) const; - Transactions topTransactions_WITH_LOCK( - unsigned _limit, int _maxCategory = 0, int _setCategory = -1 ); + Transactions topTransactions_WITH_LOCK( unsigned _limit ); void insertCurrent_WITH_LOCK( std::pair< h256, Transaction > const& _p ); void makeCurrent_WITH_LOCK( Transaction const& _t ); diff --git a/libevm/VMFactory.cpp b/libevm/VMFactory.cpp index eefba4e3e..8e5de669b 100644 --- a/libevm/VMFactory.cpp +++ b/libevm/VMFactory.cpp @@ -50,7 +50,6 @@ struct VMKindTableEntry { /// We don't use a map to avoid complex dynamic initialization. This list will never be long, /// so linear search only to parse command line arguments is not a problem. VMKindTableEntry vmKindsTable[] = { - { VMKind::Interpreter, "interpreter" }, { VMKind::Legacy, "legacy" }, }; @@ -170,8 +169,6 @@ VMPtr VMFactory::create( VMKind _kind ) { static const auto null_delete = []( VMFace* ) noexcept {}; switch ( _kind ) { - case VMKind::Interpreter: - return { new EVMC{ evmc_create_interpreter() }, default_delete }; case VMKind::DLL: assert( g_evmcDll != nullptr ); // Return "fake" owning pointer to global EVMC DLL VM. diff --git a/libevm/VMFactory.h b/libevm/VMFactory.h index aa9fc1e34..f2913a789 100644 --- a/libevm/VMFactory.h +++ b/libevm/VMFactory.h @@ -22,7 +22,7 @@ namespace dev { namespace eth { -enum class VMKind { Interpreter, Legacy, DLL }; +enum class VMKind { Legacy, DLL }; /// Returns the EVMC options parsed from command line. std::vector< std::pair< std::string, std::string > >& evmcOptions() noexcept; diff --git a/libskale/OverlayDB.cpp b/libskale/OverlayDB.cpp index 113cb9987..c24902885 100644 --- a/libskale/OverlayDB.cpp +++ b/libskale/OverlayDB.cpp @@ -26,6 +26,8 @@ #include "libhistoric/HistoricState.h" #include +#include + #include using std::string; @@ -36,7 +38,7 @@ using std::vector; #include #include -//#include "SHA3.h" +// #include "SHA3.h" using dev::bytes; using dev::bytesConstRef; @@ -95,49 +97,74 @@ dev::h256 OverlayDB::getLastExecutedTransactionHash() const { return shaLastTx; } -dev::bytes OverlayDB::getPartialTransactionReceipts() const { - if ( lastExecutedTransactionReceipts.has_value() ) - return lastExecutedTransactionReceipts.value(); +std::vector< dev::bytes > OverlayDB::getPartialTransactionReceipts( + dev::eth::BlockNumber _blockNumber ) const { + std::vector< dev::bytes > partialTransactionReceipts; + + string prefix( "safeLastTransactionReceipts." + + uint64ToFixedLengthHex( ( uint64_t ) _blockNumber ) + "." ); - dev::bytes partialTransactionReceipts; if ( m_db_face ) { - const std::string l = - m_db_face->lookup( skale::slicing::toSlice( "safeLastTransactionReceipts" ) ); - if ( !l.empty() ) - partialTransactionReceipts.insert( - partialTransactionReceipts.end(), l.begin(), l.end() ); + m_db_face->forEachWithPrefix( prefix, [&partialTransactionReceipts]( Slice, Slice value ) { + const std::string l( value.begin(), value.end() ); + if ( !l.empty() ) { + dev::bytes b( l.begin(), l.end() ); + partialTransactionReceipts.push_back( b ); + } + return true; + } ); } - - lastExecutedTransactionReceipts = partialTransactionReceipts; return partialTransactionReceipts; } + +void OverlayDB::removeAllPartialTransactionReceipts() { + // first we get all keys + + string prefix( "safeLastTransactionReceipts." ); + vector< string > keys; + if ( m_db_face ) { + m_db_face->forEachWithPrefix( prefix, [&keys]( Slice key, Slice ) { + const std::string keyStr( key.begin(), key.end() ); + keys.push_back( keyStr ); + return true; + } ); + + for ( auto&& key : keys ) { + // now remove all of them + m_db_face->kill( key ); + } + } + + m_db_face->commit( "Clean partial keys" ); +} + + void OverlayDB::setLastExecutedTransactionHash( const dev::h256& _newHash ) { this->lastExecutedTransactionHash = _newHash; } -void OverlayDB::setPartialTransactionReceipts( const dev::bytes& _newReceipts ) { - this->lastExecutedTransactionReceipts = _newReceipts; -} -void OverlayDB::addReceiptToPartials( const dev::eth::TransactionReceipt& _receipt ) { - auto rawTransactionReceipts = getPartialTransactionReceipts(); +// transform uin564_t to hex format of fixed length prepending zeros +// if needed. This is needed to put keys into LevelDB in lexicographic order +std::string OverlayDB::uint64ToFixedLengthHex( uint64_t value ) { + // Create a stringstream to hold the hex representation + std::stringstream res; - // TODO Temporary solution - do not (de)serialize forth and back! + // Set formatting options: hex, fill with zeros, and a width of 16 characters + // (uint64_t can have a maximum of 16 hex characters). + res << std::hex << std::setw( 16 ) << std::setfill( '0' ) << value; - dev::eth::BlockReceipts blockReceipts; - if ( !rawTransactionReceipts.empty() ) { - dev::RLP rlp( rawTransactionReceipts ); - blockReceipts = dev::eth::BlockReceipts( rlp ); - } // if + // Convert the stream to a string + return res.str(); +} - blockReceipts.receipts.push_back( _receipt ); +void OverlayDB::setPartialTransactionReceipt( const dev::bytes& _newReceipt, + dev::eth::BlockNumber _blockNumber, uint64_t _transactionIndex ) { + string key = "safeLastTransactionReceipts." + uint64ToFixedLengthHex( _blockNumber ) + "." + + uint64ToFixedLengthHex( _transactionIndex ); - setPartialTransactionReceipts( blockReceipts.rlp() ); -} -void OverlayDB::clearPartialTransactionReceipts() { - dev::eth::BlockReceipts blockReceipts; - setPartialTransactionReceipts( blockReceipts.rlp() ); + m_db_face->insert( skale::slicing::toSlice( key ), skale::slicing::toSlice( _newReceipt ) ); } @@ -168,7 +195,7 @@ void OverlayDB::commitStorageValues() { } -void OverlayDB::commit( const std::string& _debugCommitId ) { +void OverlayDB::commit() { if ( m_db_face ) { for ( unsigned commitTry = 0; commitTry < 10; ++commitTry ) { // cnote << "Committing nodes to disk DB:"; @@ -202,13 +229,10 @@ void OverlayDB::commit( const std::string& _debugCommitId ) { m_db_face->insert( skale::slicing::toSlice( "safeLastExecutedTransactionHash" ), skale::slicing::toSlice( getLastExecutedTransactionHash() ) ); - - m_db_face->insert( skale::slicing::toSlice( "safeLastTransactionReceipts" ), - skale::slicing::toSlice( getPartialTransactionReceipts() ) ); } try { - m_db_face->commit( "OverlayDB_commit_" + _debugCommitId ); + m_db_face->commit( "OverlayDB_commit" ); break; } catch ( boost::exception const& ex ) { if ( commitTry == 9 ) { diff --git a/libskale/OverlayDB.h b/libskale/OverlayDB.h index 9b88138de..2c504a7d1 100644 --- a/libskale/OverlayDB.h +++ b/libskale/OverlayDB.h @@ -63,16 +63,19 @@ class OverlayDB { OverlayDB& operator=( OverlayDB&& ) = default; dev::h256 getLastExecutedTransactionHash() const; - dev::bytes getPartialTransactionReceipts() const; + std::vector< dev::bytes > getPartialTransactionReceipts( + dev::eth::BlockNumber _blockNumber ) const; + + void removeAllPartialTransactionReceipts(); + void setLastExecutedTransactionHash( const dev::h256& ); - void setPartialTransactionReceipts( const dev::bytes& ); - void addReceiptToPartials( const dev::eth::TransactionReceipt& ); - void clearPartialTransactionReceipts(); + void setPartialTransactionReceipt( const dev::bytes& _newReceipt, + dev::eth::BlockNumber _blockNumber, uint64_t _transactionIndex ); // commit key-value pairs in storage void commitStorageValues(); - void commit( const std::string& _debugCommitId ); + void commit(); void rollback(); void clearDB(); bool connected() const; @@ -105,6 +108,8 @@ class OverlayDB { std::unordered_map< dev::u256, dev::u256 > storage( dev::h160 const& address ) const; + static std::string uint64ToFixedLengthHex( uint64_t value ); + private: std::unordered_map< dev::h160, dev::bytes > m_cache; std::unordered_map< dev::h160, std::unordered_map< _byte_, dev::bytes > > m_auxiliaryCache; @@ -116,9 +121,8 @@ class OverlayDB { dev::bytes getAuxiliaryKey( dev::h160 const& _address, _byte_ space ) const; dev::bytes getStorageKey( dev::h160 const& _address, dev::h256 const& _storageAddress ) const; - mutable std::optional< dev::h256 > lastExecutedTransactionHash; - mutable std::optional< dev::bytes > lastExecutedTransactionReceipts; + public: std::shared_ptr< batched_io::db_face > db() { return m_db_face; } diff --git a/libskale/SkaleDebug.h b/libskale/SkaleDebug.h index 3d5dd6d8c..6dfa924d2 100644 --- a/libskale/SkaleDebug.h +++ b/libskale/SkaleDebug.h @@ -72,4 +72,5 @@ class SkaleDebugTracer { std::string DebugTracer_handler( const std::string& arg, SkaleDebugTracer& tracer ); + #endif // SKALEDEBUG_H diff --git a/libskale/State.cpp b/libskale/State.cpp index 3fdfb4e19..fd0f56384 100644 --- a/libskale/State.cpp +++ b/libskale/State.cpp @@ -38,6 +38,7 @@ #include "libweb3jsonrpc/Eth.h" #include "libweb3jsonrpc/JsonHelper.h" +#include "test/tools/libtestutils/FixedClient.h" #include #include @@ -76,8 +77,6 @@ State::State( dev::u256 const& _accountStartNonce, boost::filesystem::path const dev::h256 const& _genesis, BaseState _bs, dev::u256 _initialFunds, dev::s256 _contractStorageLimit ) : x_db_ptr( make_shared< boost::shared_mutex >() ), - m_storedVersion( make_shared< size_t >( 0 ) ), - m_currentVersion( *m_storedVersion ), m_accountStartNonce( _accountStartNonce ), m_initial_funds( _initialFunds ), contractStorageLimit_( _contractStorageLimit ) @@ -101,7 +100,7 @@ State::State( dev::u256 const& _accountStartNonce, boost::filesystem::path const m_db_ptr = make_shared< OverlayDB >( openDB( _dbPath, _genesis, _bs == BaseState::PreExisting ? dev::WithExisting::Trust : dev::WithExisting::Kill ) ); - auto state = createStateReadOnlyCopy(); + auto state = createStateCopyAndClearCaches(); totalStorageUsed_ = state.storageUsedTotal(); #ifdef HISTORIC_STATE m_historicState.setRootFromDB(); @@ -125,8 +124,6 @@ State::State( u256 const& _accountStartNonce, OverlayDB const& _db, skale::BaseState _bs, u256 _initialFunds, s256 _contractStorageLimit ) : x_db_ptr( make_shared< boost::shared_mutex >() ), m_db_ptr( make_shared< OverlayDB >( _db ) ), - m_storedVersion( make_shared< size_t >( 0 ) ), - m_currentVersion( *m_storedVersion ), m_accountStartNonce( _accountStartNonce ), m_initial_funds( _initialFunds ), contractStorageLimit_( _contractStorageLimit ) @@ -135,7 +132,7 @@ State::State( u256 const& _accountStartNonce, OverlayDB const& _db, m_historicState( _accountStartNonce, _historicDb, _historicBlockToStateRootDb, _bs ) #endif { - auto state = createStateReadOnlyCopy(); + auto state = createStateCopyAndClearCaches(); totalStorageUsed_ = state.storageUsedTotal(); #ifdef HISTORIC_STATE m_historicState.setRootFromDB(); @@ -258,38 +255,24 @@ State::State( const State& _s ) #endif { x_db_ptr = _s.x_db_ptr; - if ( _s.m_db_read_lock ) { - m_db_read_lock.emplace( *x_db_ptr ); - } - if ( _s.m_db_write_lock ) { - std::logic_error( "Can't copy locked for writing state object" ); - } m_db_ptr = _s.m_db_ptr; m_orig_db = _s.m_orig_db; - m_storedVersion = _s.m_storedVersion; - m_currentVersion = _s.m_currentVersion; m_cache = _s.m_cache; m_unchangedCacheEntries = _s.m_unchangedCacheEntries; m_nonExistingAccountsCache = _s.m_nonExistingAccountsCache; m_accountStartNonce = _s.m_accountStartNonce; m_changeLog = _s.m_changeLog; m_initial_funds = _s.m_initial_funds; + m_snap = _s.m_snap; + m_isReadOnlySnapBasedState = _s.m_isReadOnlySnapBasedState; contractStorageLimit_ = _s.contractStorageLimit_; totalStorageUsed_ = _s.storageUsedTotal(); } State& State::operator=( const State& _s ) { x_db_ptr = _s.x_db_ptr; - if ( _s.m_db_read_lock ) { - m_db_read_lock.emplace( *x_db_ptr ); - } - if ( _s.m_db_write_lock ) { - std::logic_error( "Can't copy locked for writing state object" ); - } m_db_ptr = _s.m_db_ptr; m_orig_db = _s.m_orig_db; - m_storedVersion = _s.m_storedVersion; - m_currentVersion = _s.m_currentVersion; m_cache = _s.m_cache; m_unchangedCacheEntries = _s.m_unchangedCacheEntries; m_nonExistingAccountsCache = _s.m_nonExistingAccountsCache; @@ -302,6 +285,8 @@ State& State::operator=( const State& _s ) { m_historicState = _s.m_historicState; #endif m_fs_ptr = _s.m_fs_ptr; + m_snap = _s.m_snap; + m_isReadOnlySnapBasedState = _s.m_isReadOnlySnapBasedState; return *this; } @@ -313,25 +298,39 @@ dev::h256 State::safeLastExecutedTransactionHash() { return shaLastTx; } -dev::eth::TransactionReceipts State::safePartialTransactionReceipts() { +dev::eth::TransactionReceipts State::safePartialTransactionReceipts( + eth::BlockNumber _blockNumber ) { dev::eth::TransactionReceipts partialTransactionReceipts; if ( m_db_ptr ) { - dev::bytes rawTransactionReceipts = m_db_ptr->getPartialTransactionReceipts(); - if ( !rawTransactionReceipts.empty() ) { - dev::RLP rlp( rawTransactionReceipts ); - dev::eth::BlockReceipts blockReceipts( rlp ); - partialTransactionReceipts.insert( partialTransactionReceipts.end(), - blockReceipts.receipts.begin(), blockReceipts.receipts.end() ); + auto rawTransactionReceipts = m_db_ptr->getPartialTransactionReceipts( _blockNumber ); + for ( auto&& rawTransactionReceipt : rawTransactionReceipts ) { + dev::RLP rlp( rawTransactionReceipt ); + dev::eth::TransactionReceipt receipt( rlp.data() ); + partialTransactionReceipts.push_back( receipt ); } } + + return partialTransactionReceipts; } -void State::clearPartialTransactionReceipts() { - dev::eth::BlockReceipts blockReceipts; - m_db_ptr->setPartialTransactionReceipts( blockReceipts.rlp() ); + +void State::safeRemoveAllPartialTransactionReceipts() { + if ( m_db_ptr ) { + m_db_ptr->removeAllPartialTransactionReceipts(); + } +} + + +void State::safeSetAndCommitPartialTransactionReceipt( + const dev::bytes& _receipt, dev::eth::BlockNumber _blockNumber, uint64_t _transactionIndex ) { + if ( m_db_ptr ) { + m_db_ptr->setPartialTransactionReceipt( _receipt, _blockNumber, _transactionIndex ); + m_db_ptr->commit(); + } } + void State::populateFrom( eth::AccountMap const& _map ) { for ( auto const& addressAccountPair : _map ) { const Address& address = addressAccountPair.first; @@ -361,12 +360,7 @@ void State::populateFrom( eth::AccountMap const& _map ) { } std::unordered_map< Address, u256 > State::addresses() const { - boost::shared_lock< boost::shared_mutex > lock( *x_db_ptr ); - if ( !checkVersion() ) { - cerror << "Current state version is " << m_currentVersion << " but stored version is " - << *m_storedVersion; - BOOST_THROW_EXCEPTION( AttemptToReadFromStateInThePast() ); - } + SharedDBGuard lock( *this ); std::unordered_map< Address, u256 > addresses; for ( auto const& h160StringPair : m_db_ptr->accounts() ) { @@ -442,13 +436,7 @@ eth::Account* State::account( Address const& _address ) { // Populate basic info. bytes stateBack; { - boost::shared_lock< boost::shared_mutex > lock( *x_db_ptr ); - - if ( !checkVersion() ) { - cerror << "Current state version is " << m_currentVersion << " but stored version is " - << *m_storedVersion; - BOOST_THROW_EXCEPTION( AttemptToReadFromStateInThePast() ); - } + SharedDBGuard lock( *this ); stateBack = asBytes( m_db_ptr->lookup( _address ) ); } @@ -498,13 +486,9 @@ void State::commit( dev::eth::CommitBehaviour _commitBehaviour ) { removeEmptyAccounts(); { - if ( !m_db_write_lock ) { - BOOST_THROW_EXCEPTION( AttemptToWriteToNotLockedStateObject() ); - } - boost::upgrade_to_unique_lock< boost::shared_mutex > lock( *m_db_write_lock ); - if ( !checkVersion() ) { - BOOST_THROW_EXCEPTION( AttemptToWriteToStateInThePast() ); - } + LDB_CHECK( !m_isReadOnlySnapBasedState ); + + boost::unique_lock< boost::shared_mutex > lock( *x_db_ptr ); for ( auto const& addressAccountPair : m_cache ) { const Address& address = addressAccountPair.first; @@ -543,8 +527,7 @@ void State::commit( dev::eth::CommitBehaviour _commitBehaviour ) { } } m_db_ptr->updateStorageUsage( totalStorageUsed_ ); - m_db_ptr->commit( std::to_string( ++*m_storedVersion ) ); - m_currentVersion = *m_storedVersion; + m_db_ptr->commit(); } @@ -553,8 +536,15 @@ void State::commit( dev::eth::CommitBehaviour _commitBehaviour ) { #endif m_changeLog.clear(); - m_cache.clear(); - m_unchangedCacheEntries.clear(); + // normally we clear caches after commit, since the data goes to the db + // during commit + // for testeth GeneralState tests, though, there is no db connected to the + // State , so we do not clear caches + // since they play the role of the db + if ( m_db_ptr->connected() ) { + m_cache.clear(); + m_unchangedCacheEntries.clear(); + } } @@ -665,19 +655,13 @@ void State::kill( Address _addr ) { std::map< h256, std::pair< u256, u256 > > State::storage( const Address& _contract ) const { - boost::shared_lock< boost::shared_mutex > lock( *x_db_ptr ); + SharedDBGuard lock( *this ); return storage_WITHOUT_LOCK( _contract ); } std::map< h256, std::pair< u256, u256 > > State::storage_WITHOUT_LOCK( const Address& _contract ) const { - if ( !checkVersion() ) { - cerror << "Current state version is " << m_currentVersion << " but stored version is " - << *m_storedVersion; - BOOST_THROW_EXCEPTION( AttemptToReadFromStateInThePast() ); - } - std::map< h256, std::pair< u256, u256 > > storage; for ( auto const& addressValuePair : m_db_ptr->storage( _contract ) ) { u256 const& address = addressValuePair.first; @@ -717,10 +701,7 @@ u256 State::storage( Address const& _id, u256 const& _key ) const { return memoryIterator->second; // Not in the storage cache - go to the DB. - boost::shared_lock< boost::shared_mutex > lock( *x_db_ptr ); - if ( !checkVersion() ) { - BOOST_THROW_EXCEPTION( AttemptToReadFromStateInThePast() ); - } + SharedDBGuard lock( *this ); u256 value = m_db_ptr->lookup( _id, _key ); acc->setStorageCache( _key, value ); return value; @@ -775,10 +756,7 @@ u256 State::originalStorageValue( Address const& _contract, u256 const& _key ) c return memoryPtr->second; } - boost::shared_lock< boost::shared_mutex > lock( *x_db_ptr ); - if ( !checkVersion() ) { - BOOST_THROW_EXCEPTION( AttemptToReadFromStateInThePast() ); - } + SharedDBGuard lock( *this ); u256 value = m_db_ptr->lookup( _contract, _key ); acc->setStorageCache( _key, value ); return value; @@ -833,10 +811,7 @@ bytes const& State::code( Address const& _addr ) const { if ( a->code().empty() ) { // Load the code from the backend. eth::Account* mutableAccount = const_cast< eth::Account* >( a ); - boost::shared_lock< boost::shared_mutex > lock( *x_db_ptr ); - if ( !checkVersion() ) { - BOOST_THROW_EXCEPTION( AttemptToReadFromStateInThePast() ); - } + SharedDBGuard lock( *this ); mutableAccount->noteCode( m_db_ptr->lookupAuxiliary( _addr, Auxiliary::CODE ) ); eth::CodeSizeCache::instance().store( a->codeHash(), a->code().size() ); } @@ -935,60 +910,42 @@ void State::rollback( size_t _savepoint ) { } } -void State::updateToLatestVersion() { +void State::clearCaches() { + clearAllCaches(); +} + +void State::clearAllCaches() { m_changeLog.clear(); m_cache.clear(); m_unchangedCacheEntries.clear(); m_nonExistingAccountsCache.clear(); - - { - boost::shared_lock< boost::shared_mutex > lock( *x_db_ptr ); - m_currentVersion = *m_storedVersion; - } } -State State::createStateReadOnlyCopy() const { - State stateCopy = State( *this ); - stateCopy.m_db_read_lock.emplace( *stateCopy.x_db_ptr ); - stateCopy.updateToLatestVersion(); - return stateCopy; -} -State State::createStateModifyCopy() const { +State State::createStateCopyAndClearCaches() const { + LDB_CHECK( !m_isReadOnlySnapBasedState ); State stateCopy = State( *this ); - stateCopy.m_db_write_lock.emplace( *stateCopy.x_db_ptr ); - stateCopy.updateToLatestVersion(); + stateCopy.clearCaches(); return stateCopy; } -State State::createStateModifyCopyAndPassLock() { - if ( m_db_write_lock ) { - boost::upgrade_lock< boost::shared_mutex > lock; - lock.swap( *m_db_write_lock ); - m_db_write_lock = boost::none; - State stateCopy = State( *this ); - stateCopy.m_db_write_lock = boost::upgrade_lock< boost::shared_mutex >(); - stateCopy.m_db_write_lock->swap( lock ); - return stateCopy; - } else { - return createStateModifyCopy(); - } -} -void State::releaseWriteLock() { - m_db_write_lock = boost::none; -} - -State State::createNewCopyWithLocks() { - State copy; - if ( m_db_write_lock ) - copy = createStateModifyCopyAndPassLock(); - else - copy = State( *this ); - if ( m_db_read_lock ) - copy.m_db_read_lock.emplace( *copy.x_db_ptr ); - copy.updateToLatestVersion(); - return copy; +State State::createReadOnlySnapBasedCopy() const { + LDB_CHECK( !m_isReadOnlySnapBasedState ); + State stateCopy = *this; + stateCopy.m_isReadOnlySnapBasedState = true; + stateCopy.clearAllCaches(); + // get the snap for the latest block + LDB_CHECK( m_orig_db ); + stateCopy.m_orig_db = m_orig_db; + stateCopy.m_snap = m_orig_db->getLastBlockSnap(); + LDB_CHECK( stateCopy.m_snap ) + // the state does not use any locking since it is based on db snapshot + stateCopy.x_db_ptr = nullptr; + stateCopy.m_db_ptr = + make_shared< OverlayDB >( make_unique< batched_io::read_only_snap_based_batched_db >( + stateCopy.m_orig_db, stateCopy.m_snap ) ); + return stateCopy; } bool State::connected() const { @@ -1001,7 +958,7 @@ bool State::connected() const { bool State::empty() const { if ( m_cache.empty() ) { if ( m_db_ptr ) { - boost::shared_lock< boost::shared_mutex > lock( *x_db_ptr ); + SharedDBGuard lock( *this ); if ( m_db_ptr->empty() ) { return true; } @@ -1022,7 +979,7 @@ uint64_t State::getGasUsedForSkippedTransaction( uint64_t _chainId, const dev::h std::pair< ExecutionResult, TransactionReceipt > State::execute( EnvInfo const& _envInfo, eth::ChainOperationParams const& _chainParams, Transaction const& _t, Permanence _p, - OnOpFunc const& _onOp ) { + OnOpFunc const& _onOp, int64_t _transactionIndex ) { // Create and initialize the executive. This will throw fairly cheaply and quickly if the // transaction is bad in any way. // HACK 0 here is for gasPrice @@ -1092,13 +1049,39 @@ std::pair< ExecutionResult, TransactionReceipt > State::execute( EnvInfo const& TransactionReceipt( EmptyTrie, startGasUsed + e.gasUsed(), e.logs() ); } receipt.setRevertReason( strRevertReason ); - m_db_ptr->addReceiptToPartials( receipt ); + + // if we are committing we need to know transaction index in block since + // to save the receipt + LDB_CHECK( _transactionIndex >= 0 ); + RLPStream stream; + receipt.streamRLP( stream ); + m_db_ptr->setPartialTransactionReceipt( + stream.out(), ( BlockNumber ) _envInfo.number(), ( uint64_t ) _transactionIndex ); + m_fs_ptr->commit(); removeEmptyAccounts = _envInfo.number() >= _chainParams.EIP158ForkBlock; commit( removeEmptyAccounts ? dev::eth::CommitBehaviour::RemoveEmptyAccounts : dev::eth::CommitBehaviour::KeepEmptyAccounts ); + + // do a simple sanity check each millions transactions that we correctly + // saved partial transaction receipt + // at 1000 tps and 1 sec block time this means that we are doing this roughly each 1000 + // blocks so we are not slowing down the system by doing a check + static uint64_t sanityCheckCounter = 0; + sanityCheckCounter++; + if ( sanityCheckCounter % 1000000 == 0 ) { + auto receipts = safePartialTransactionReceipts( _envInfo.number() ); + if ( receipts.back().rlp() != receipt.rlp() ) { + cerr << "Found incorrect deserialization of partial receipts at sanity check:" + << sanityCheckCounter << endl + << receipts.back() << endl + << receipt; + } + } + + break; } case Permanence::Uncommitted: @@ -1172,9 +1155,6 @@ dev::s256 State::storageUsed( const dev::Address& _addr ) const { } } -bool State::checkVersion() const { - return *m_storedVersion == m_currentVersion; -} std::ostream& skale::operator<<( std::ostream& _out, State const& _s ) { _out << cc::debug( "--- Cache ---" ) << std::endl; @@ -1241,3 +1221,8 @@ std::ostream& skale::operator<<( std::ostream& _out, State const& _s ) { } return _out; } + +void State::createReadOnlyStateDBSnap( uint64_t _blockNumber ) { + LDB_CHECK( m_orig_db ); + m_orig_db->createBlockSnap( _blockNumber ); +} \ No newline at end of file diff --git a/libskale/State.h b/libskale/State.h index 4e8d7b476..e6a81ed92 100644 --- a/libskale/State.h +++ b/libskale/State.h @@ -43,6 +43,9 @@ #include "OverlayFS.h" #include +#include +#include + namespace std { template <> @@ -159,6 +162,28 @@ using ChangeLog = std::vector< Change >; */ class State { public: + class SharedDBGuard { + const State& m_state; + + + public: + explicit SharedDBGuard( const State& _state ) : m_state( _state ) { + if ( m_state.m_isReadOnlySnapBasedState ) + return; + if ( !m_state.x_db_ptr ) { + throw std::logic_error( "Null pointer in SharedDBGuard" ); + }; + m_state.x_db_ptr->lock_shared(); + } + + ~SharedDBGuard() { + if ( m_state.m_isReadOnlySnapBasedState ) + return; + m_state.x_db_ptr->unlock_shared(); + } + }; + + using AddressMap = std::map< dev::h256, dev::Address >; /// Default constructor; creates with a blank database prepopulated with the genesis block. @@ -181,6 +206,8 @@ class State { dev::u256 _initialFunds = 0, dev::s256 _contractStorageLimit = 32 ); /// which uses it. If you have no preexisting database then set BaseState to something other + // this conswtructor is used for tests + // we need to create temp stattedb in the /tmp dir State() : State( dev::Invalid256, skale::OverlayDB(), #ifdef HISTORIC_STATE @@ -200,8 +227,13 @@ class State { State& operator=( State&& ) = default; dev::h256 safeLastExecutedTransactionHash(); - dev::eth::TransactionReceipts safePartialTransactionReceipts(); - void clearPartialTransactionReceipts(); + dev::eth::TransactionReceipts safePartialTransactionReceipts( + dev::eth::BlockNumber _blockNumber ); + void safeRemoveAllPartialTransactionReceipts(); + + + void safeSetAndCommitPartialTransactionReceipt( const dev::bytes& _receipt, + dev::eth::BlockNumber _blockNumber, uint64_t _transactionIndex ); /// Populate the state from the given AccountMap. Just uses dev::eth::commit(). void populateFrom( dev::eth::AccountMap const& _map ); @@ -340,7 +372,7 @@ class State { std::pair< dev::eth::ExecutionResult, dev::eth::TransactionReceipt > execute( dev::eth::EnvInfo const& _envInfo, dev::eth::ChainOperationParams const& _chainParams, dev::eth::Transaction const& _t, Permanence _p = Permanence::Committed, - dev::eth::OnOpFunc const& _onOp = dev::eth::OnOpFunc() ); + dev::eth::OnOpFunc const& _onOp = dev::eth::OnOpFunc(), int64_t _transactionIndex = -1 ); /// Get the account start nonce. May be required. dev::u256 const& accountStartNonce() const { return m_accountStartNonce; } @@ -356,22 +388,11 @@ class State { ChangeLog const& changeLog() const { return m_changeLog; } - /// Create State copy to get access to data. - /// Different copies can be safely used in different threads - /// but single object is not thread safe. - /// No one can change state while returned object exists. - State createStateReadOnlyCopy() const; - /// Create State copy to modify data. - State createStateModifyCopy() const; - - /// Create State copy to modify data and pass writing lock to it - State createStateModifyCopyAndPassLock(); - - - void releaseWriteLock(); + State createStateCopyAndClearCaches() const; - State createNewCopyWithLocks(); + /// Create State copy based on LevedlDB snaps that does not use any locking + State createReadOnlySnapBasedCopy() const; /** * @brief connected returns true if state is connected to database @@ -381,7 +402,7 @@ class State { /// Check if state is empty bool empty() const; - const dev::db::DBImpl* getOriginalDb() const { return m_orig_db.get(); } + dev::db::DBImpl* getOriginalDb() const { return m_orig_db.get(); } void resetStorageChanges() { storageUsage.clear(); @@ -391,7 +412,7 @@ class State { dev::s256 storageUsed( const dev::Address& _addr ) const; dev::s256 storageUsedTotal() const { - boost::shared_lock< boost::shared_mutex > lock( *x_db_ptr ); + SharedDBGuard( *this ); return m_db_ptr->storageUsed(); } @@ -400,8 +421,10 @@ class State { }; // only for tests + void createReadOnlyStateDBSnap( uint64_t _blockNumber ); + private: - void updateToLatestVersion(); + void clearCaches(); explicit State( dev::u256 const& _accountStartNonce, skale::OverlayDB const& _db, #ifdef HISTORIC_STATE @@ -455,8 +478,6 @@ class State { static uint64_t getGasUsedForSkippedTransaction( uint64_t _chainId, const dev::h256& _hash ); public: - bool checkVersion() const; - #ifdef HISTORIC_STATE void populateHistoricStateFromSkaleState(); void populateHistoricStateBatchFromSkaleState( @@ -467,16 +488,10 @@ class State { private: enum Auxiliary { CODE = 1 }; - boost::optional< boost::shared_lock< boost::shared_mutex > > m_db_read_lock; - boost::optional< boost::upgrade_lock< boost::shared_mutex > > m_db_write_lock; - std::shared_ptr< boost::shared_mutex > x_db_ptr; std::shared_ptr< OverlayDB > m_db_ptr; ///< Our overlay for the state. std::shared_ptr< OverlayFS > m_fs_ptr; ///< Our overlay for the file system operations. - // TODO Implement DB-registry, remove it! std::shared_ptr< dev::db::DBImpl > m_orig_db; - std::shared_ptr< size_t > m_storedVersion; - size_t m_currentVersion; mutable std::unordered_map< dev::Address, dev::eth::Account > m_cache; ///< Our address cache. ///< This stores the ///< states of each @@ -499,6 +514,9 @@ class State { std::map< dev::Address, dev::s256 > storageUsage; dev::s256 totalStorageUsed_ = 0; dev::s256 currentStorageUsed_ = 0; + // if the state is based on a LevelDB snap, the instance of the snap goes here + std::shared_ptr< dev::db::LevelDBSnap > m_snap = nullptr; + bool m_isReadOnlySnapBasedState = false; #ifdef HISTORIC_STATE dev::eth::HistoricState m_historicState; @@ -522,6 +540,8 @@ class State { return pDB; } std::shared_ptr< OverlayFS > fs() { return m_fs_ptr; } + + void clearAllCaches(); }; std::ostream& operator<<( std::ostream& _out, State const& _s ); diff --git a/libskale/broadcaster.cpp b/libskale/broadcaster.cpp index ee625536d..ef7650b33 100644 --- a/libskale/broadcaster.cpp +++ b/libskale/broadcaster.cpp @@ -90,7 +90,8 @@ void* ZmqBroadcaster::server_socket() const { if ( !m_zmq_server_socket ) { m_zmq_server_socket = zmq_socket( m_zmq_context, ZMQ_PUB ); - int val = 16; + // it was 16 before, this caused messages lost during performance tests + int val = 1024; zmq_setsockopt( m_zmq_server_socket, ZMQ_SNDHWM, &val, sizeof( val ) ); const dev::eth::ChainParams& ch = m_client.chainParams(); @@ -232,12 +233,13 @@ void ZmqBroadcaster::stopService() { m_thread.join(); } -void ZmqBroadcaster::broadcast( const std::string& _rlp ) { - if ( _rlp.empty() ) { - server_socket(); - return; - } +void ZmqBroadcaster::initSocket() { + server_socket(); +} + + +void ZmqBroadcaster::broadcast( const std::string& _rlp ) { int res = zmq_send( server_socket(), const_cast< char* >( _rlp.c_str() ), _rlp.size(), 0 ); if ( res <= 0 ) { clog( dev::VerbosityWarning, "zmq-broadcaster" ) diff --git a/libskale/broadcaster.h b/libskale/broadcaster.h index 0e563d8cc..bb4381de3 100644 --- a/libskale/broadcaster.h +++ b/libskale/broadcaster.h @@ -52,6 +52,7 @@ class Broadcaster { Broadcaster() {} virtual ~Broadcaster(); + virtual void initSocket(){}; virtual void broadcast( const std::string& _rlp ) = 0; virtual void startService() = 0; @@ -81,6 +82,7 @@ class ZmqBroadcaster : public Broadcaster { virtual ~ZmqBroadcaster(); virtual void broadcast( const std::string& _rlp ); + virtual void initSocket(); virtual void startService(); virtual void stopService(); diff --git a/libweb3jsonrpc/Eth.cpp b/libweb3jsonrpc/Eth.cpp index 6a39183fd..81698052c 100644 --- a/libweb3jsonrpc/Eth.cpp +++ b/libweb3jsonrpc/Eth.cpp @@ -412,6 +412,7 @@ Json::Value Eth::setSchainExitTime( Json::Value const& /*_transaction*/ ) { } + Json::Value Eth::eth_inspectTransaction( std::string const& _rlp ) { try { return toJson( Transaction( jsToBytes( _rlp, OnFailed::Throw ), @@ -428,7 +429,7 @@ string Eth::eth_sendRawTransaction( std::string const& _rlp ) { // will be checked as a part of transaction import Transaction t( jsToBytes( _rlp, OnFailed::Throw ), CheckTransaction::None, false, EIP1559TransactionsPatch::isEnabledInWorkingBlock() ); - return toJS( client()->importTransaction( t ) ); + return toJS( client()->importTransaction( t, TransactionBroadcast::BroadcastToAll ) ); } diff --git a/skale-vm/main.cpp b/skale-vm/main.cpp index 117da3cfe..23d59f685 100644 --- a/skale-vm/main.cpp +++ b/skale-vm/main.cpp @@ -288,11 +288,11 @@ int main( int argc, char** argv ) { ChainParams chainParams( genesisInfo( networkName ) ); LastBlockHashes lastBlockHashes; + EnvInfo const envInfo( blockHeader, lastBlockHashes, 0 /*_committedBlockTimestamp*/, 0 /* gasUsed */, chainParams.chainID ); EVMSchedule evmSchedule = chainParams.makeEvmSchedule( 0, envInfo.number() ); - state = state.createStateModifyCopy(); Transaction t; Address contractDestination( "1122334455667788991011121314151617181920" ); @@ -314,8 +314,9 @@ int main( int argc, char** argv ) { state.addBalance( sender, value ); - // HACK 1st 0 here is for gasPrice + // H1st 0 here is for gasPrice Executive executive( state, envInfo, chainParams, 0, 0 ); + ExecutionResult res; executive.setResultRecipient( res ); t.forceSender( sender ); @@ -351,8 +352,10 @@ int main( int argc, char** argv ) { bytes output = std::move( res.output ); if ( mode == Mode::Statistics ) { + cout << "Gas used: " << res.gasUsed << " (+" << t.baseGasRequired( evmSchedule ) << " for transaction, -" << res.gasRefunded << " refunded)\n"; + cout << "Output: " << toHex( output ) << "\n"; LogEntries logs = executive.logs(); cout << logs.size() << " logs" << ( logs.empty() ? "." : ":" ) << "\n"; @@ -390,7 +393,6 @@ int main( int argc, char** argv ) { cout << "exec time: " << fixed << setprecision( 6 ) << execTime << '\n'; } - state.releaseWriteLock(); return 0; } diff --git a/skaled/main.cpp b/skaled/main.cpp index c7eb2389d..4cc4ffd7e 100644 --- a/skaled/main.cpp +++ b/skaled/main.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -148,6 +149,9 @@ static void version() { std::cout << cc::info( "Build" ) << cc::debug( "............................." ) << cc::attention( buildinfo->system_name ) << cc::debug( "/" ) << cc::attention( buildinfo->build_type ) << "\n"; + std::cout << "Working dir" + << "......................" << std::filesystem::current_path().string() << endl; + std::cout.flush(); } @@ -1046,8 +1050,9 @@ int main( int argc, char** argv ) try { setupLogging( loggingOptions ); - const size_t nCpuCount = skutils::tools::cpu_count(); - size_t nDispatchThreads = nCpuCount * 2; + // we do not really use these threads anymore + // so setting default value to 1 + size_t nDispatchThreads = 1; if ( vm.count( "dispatch-threads" ) ) { size_t n = vm["dispatch-threads"].as< size_t >(); const size_t nMin = 4; @@ -1076,6 +1081,7 @@ int main( int argc, char** argv ) try { if ( vm.count( "config" ) ) { try { configPath = vm["config"].as< string >(); + std::cout << "Using config file:" << configPath << endl; if ( !fs::is_regular_file( configPath.string() ) ) throw std::runtime_error( "Bad config file path" ); configJSON = contentsString( configPath.string() ); diff --git a/storage_benchmark/main.cpp b/storage_benchmark/main.cpp index 9cfb61af9..9ee184e72 100644 --- a/storage_benchmark/main.cpp +++ b/storage_benchmark/main.cpp @@ -118,7 +118,7 @@ void testState() { cout << "Balances writes:" << endl; cout << measure_performance( [&state, &address]() { - State writeState = state.createStateModifyCopy(); + State writeState = state.createStateCopyAndClearCaches(); writeState.addBalance( address, 1 ); writeState.commit( dev::eth::CommitBehaviour::KeepEmptyAccounts ); }, @@ -128,7 +128,7 @@ void testState() { cout << "Balances reads:" << endl; cout << measure_performance( - [&state, &address]() { state.createStateModifyCopy().balance( address ); }, + [&state, &address]() { state.createStateCopyAndClearCaches().balance(address ); }, 100000 ) / 1e6 << " Mreads per second" << endl; @@ -138,7 +138,7 @@ void testState() { size_t memory_address = 0; cout << measure_performance( [&state, &address, &memory_address]() { - State writeState = state.createStateModifyCopy(); + State writeState = state.createStateCopyAndClearCaches(); writeState.setStorage( address, memory_address, memory_address ); memory_address = ( memory_address + 1 ) % 1024; writeState.commit( dev::eth::CommitBehaviour::KeepEmptyAccounts ); @@ -150,7 +150,7 @@ void testState() { cout << "EVM storate reads:" << endl; cout << measure_performance( [&state, &address, &memory_address]() { - state.createStateReadOnlyCopy().storage( address, memory_address ); + state.createReadOnlySnapBasedCopy().storage(address, memory_address ); memory_address = ( memory_address + 1 ) % 1024; }, 1000 ) / @@ -166,7 +166,7 @@ void testState() { } cout << measure_performance( [&state, &address, &code]() { - State writeState = state.createStateModifyCopy(); + State writeState = state.createStateCopyAndClearCaches(); writeState.setCode( address, code, 0 ); writeState.commit( dev::eth::CommitBehaviour::KeepEmptyAccounts ); }, @@ -176,8 +176,8 @@ void testState() { cout << "EVM code reads:" << endl; cout << measure_performance( - [&state, &address]() { state.createStateReadOnlyCopy().code( address ); }, 1000 ) / - 1e6 + [&state, &address]() { state.createReadOnlySnapBasedCopy().code(address ); }, 1000 ) / + 1e6 << " Mreads per second" << endl; } diff --git a/test/.clang-format b/test/.clang-format deleted file mode 100644 index 9d159247d..000000000 --- a/test/.clang-format +++ /dev/null @@ -1,2 +0,0 @@ -DisableFormat: true -SortIncludes: false diff --git a/test/historicstate/configs/generate_testeth_configs.py b/test/historicstate/configs/generate_testeth_configs.py new file mode 100644 index 000000000..ade985dfa --- /dev/null +++ b/test/historicstate/configs/generate_testeth_configs.py @@ -0,0 +1,55 @@ +import json + +from deps.boost_1_68_0.libs.mpl.preprocessed.pp import pretty + + +def calculate_base_port_from_index(_index): + return 1231 + (_index - 1) * 100 + + +def calculate_node_id(_chain_size, _index): + node_id_start = _chain_size * 100 + return node_id_start + _index + + +def generate_config_file(_chain_size, _schain_index): + node_id = calculate_node_id(_chain_size, _schain_index) + try: + with open('testeth_config.json', 'r') as file: + data = json.load(file) + except FileNotFoundError: + print("File not found. Please check the file path.") + except json.JSONDecodeError: + print("Error parsing JSON. Please check the JSON structure.") + + data["skaleConfig"]["nodeInfo"]["nodeID"] = node_id + base_port = calculate_base_port_from_index(_schain_index) + data["skaleConfig"]["nodeInfo"]["basePort"] = base_port + data["skaleConfig"]["nodeInfo"]["httpRpcPort"] = base_port + 3 + data["skaleConfig"]["nodeInfo"]["wsRpcPort"] = base_port + 2 + data["skaleConfig"]["nodeInfo"]["wssRpcPort"] = base_port + 7 + nodes_array = [] + for index in range(1, _chain_size + 1): + nodes_array.append( + {"basePort": calculate_base_port_from_index(index), "ip": "127.0.0.1", + "nodeID": calculate_node_id(_chain_size, index), "publicKey": "", + "schainIndex": index}) + data["skaleConfig"]["sChain"]["nodes"] = nodes_array + data["skaleConfig"]["nodeInfo"]["db-path"] = f'/tmp/test_eth_{_schain_index}_of_{_chain_size}' + + # Convert Python dictionary to a pretty-printed JSON string + pretty_json = json.dumps(data, indent=4, sort_keys=True, ensure_ascii=False) + # Print the nicely formatted JSON + # Write the JSON string to the file + with open(f'test_{_schain_index}_of_{_chain_size}.json', 'w') as file: + file.write(pretty_json) + + +def generate_test_configs_set(_chain_size): + node_id_start = _chain_size * 100 + for schain_index in range(1, _chain_size + 1): + generate_config_file(_chain_size, schain_index) + + +generate_test_configs_set(4) +generate_test_configs_set(16) diff --git a/test/historicstate/configs/test_10_of_16.json b/test/historicstate/configs/test_10_of_16.json new file mode 100644 index 000000000..8cb721d9b --- /dev/null +++ b/test/historicstate/configs/test_10_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 2131, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_10_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 2134, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1610, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 2133, + "wssRpcPort": 2138 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_11_of_16.json b/test/historicstate/configs/test_11_of_16.json new file mode 100644 index 000000000..02d5f2feb --- /dev/null +++ b/test/historicstate/configs/test_11_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 2231, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_11_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 2234, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1611, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 2233, + "wssRpcPort": 2238 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_12_of_16.json b/test/historicstate/configs/test_12_of_16.json new file mode 100644 index 000000000..50fbb6bb8 --- /dev/null +++ b/test/historicstate/configs/test_12_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 2331, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_12_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 2334, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1612, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 2333, + "wssRpcPort": 2338 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_13_of_16.json b/test/historicstate/configs/test_13_of_16.json new file mode 100644 index 000000000..5ac767b63 --- /dev/null +++ b/test/historicstate/configs/test_13_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 2431, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_13_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 2434, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1613, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 2433, + "wssRpcPort": 2438 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_14_of_16.json b/test/historicstate/configs/test_14_of_16.json new file mode 100644 index 000000000..4c3fa3486 --- /dev/null +++ b/test/historicstate/configs/test_14_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 2531, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_14_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 2534, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1614, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 2533, + "wssRpcPort": 2538 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_15_of_16.json b/test/historicstate/configs/test_15_of_16.json new file mode 100644 index 000000000..8bf623a2f --- /dev/null +++ b/test/historicstate/configs/test_15_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 2631, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_15_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 2634, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1615, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 2633, + "wssRpcPort": 2638 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_16_of_16.json b/test/historicstate/configs/test_16_of_16.json new file mode 100644 index 000000000..23b600412 --- /dev/null +++ b/test/historicstate/configs/test_16_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 2731, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_16_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 2734, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1616, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 2733, + "wssRpcPort": 2738 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_1_of_1.json b/test/historicstate/configs/test_1_of_1.json new file mode 100644 index 000000000..a31c98d61 --- /dev/null +++ b/test/historicstate/configs/test_1_of_1.json @@ -0,0 +1,806 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 1231, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_1_of_1", + "ecdsaKeyName": "", + "httpRpcPort": 1234, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 101, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 1233, + "wssRpcPort": 1238 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 101, + "publicKey": "", + "schainIndex": 1 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_1_of_16.json b/test/historicstate/configs/test_1_of_16.json new file mode 100644 index 000000000..cbc649b53 --- /dev/null +++ b/test/historicstate/configs/test_1_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 1231, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_1_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 1234, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1601, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 1233, + "wssRpcPort": 1238 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_1_of_4.json b/test/historicstate/configs/test_1_of_4.json new file mode 100644 index 000000000..59218b8d9 --- /dev/null +++ b/test/historicstate/configs/test_1_of_4.json @@ -0,0 +1,826 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 1231, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_1_of_4", + "ecdsaKeyName": "", + "httpRpcPort": 1234, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 401, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 1233, + "wssRpcPort": 1238 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 401, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 402, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 403, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 404, + "publicKey": "", + "schainIndex": 4 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_2_of_16.json b/test/historicstate/configs/test_2_of_16.json new file mode 100644 index 000000000..e69da6e5f --- /dev/null +++ b/test/historicstate/configs/test_2_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 1331, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_2_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 1334, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1602, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 1333, + "wssRpcPort": 1338 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_2_of_4.json b/test/historicstate/configs/test_2_of_4.json new file mode 100644 index 000000000..019205a01 --- /dev/null +++ b/test/historicstate/configs/test_2_of_4.json @@ -0,0 +1,826 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 1331, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_2_of_4", + "ecdsaKeyName": "", + "httpRpcPort": 1334, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 402, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 1333, + "wssRpcPort": 1338 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 401, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 402, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 403, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 404, + "publicKey": "", + "schainIndex": 4 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_3_of_16.json b/test/historicstate/configs/test_3_of_16.json new file mode 100644 index 000000000..6d799e82f --- /dev/null +++ b/test/historicstate/configs/test_3_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 1431, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_3_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 1434, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1603, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 1433, + "wssRpcPort": 1438 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_3_of_4.json b/test/historicstate/configs/test_3_of_4.json new file mode 100644 index 000000000..36580d86c --- /dev/null +++ b/test/historicstate/configs/test_3_of_4.json @@ -0,0 +1,826 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 1431, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_3_of_4", + "ecdsaKeyName": "", + "httpRpcPort": 1434, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 403, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 1433, + "wssRpcPort": 1438 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 401, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 402, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 403, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 404, + "publicKey": "", + "schainIndex": 4 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_4_of_16.json b/test/historicstate/configs/test_4_of_16.json new file mode 100644 index 000000000..250d58e14 --- /dev/null +++ b/test/historicstate/configs/test_4_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 1531, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_4_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 1534, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1604, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 1533, + "wssRpcPort": 1538 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_4_of_4.json b/test/historicstate/configs/test_4_of_4.json new file mode 100644 index 000000000..cb5aead86 --- /dev/null +++ b/test/historicstate/configs/test_4_of_4.json @@ -0,0 +1,826 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 1531, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_4_of_4", + "ecdsaKeyName": "", + "httpRpcPort": 1534, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 404, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 1533, + "wssRpcPort": 1538 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 401, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 402, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 403, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 404, + "publicKey": "", + "schainIndex": 4 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_5_of_16.json b/test/historicstate/configs/test_5_of_16.json new file mode 100644 index 000000000..4fdee6dfd --- /dev/null +++ b/test/historicstate/configs/test_5_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 1631, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_5_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 1634, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1605, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 1633, + "wssRpcPort": 1638 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_6_of_16.json b/test/historicstate/configs/test_6_of_16.json new file mode 100644 index 000000000..ae5fe2f38 --- /dev/null +++ b/test/historicstate/configs/test_6_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 1731, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_6_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 1734, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1606, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 1733, + "wssRpcPort": 1738 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_7_of_16.json b/test/historicstate/configs/test_7_of_16.json new file mode 100644 index 000000000..9fbf192f7 --- /dev/null +++ b/test/historicstate/configs/test_7_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 1831, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_7_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 1834, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1607, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 1833, + "wssRpcPort": 1838 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_8_of_16.json b/test/historicstate/configs/test_8_of_16.json new file mode 100644 index 000000000..71c02ae35 --- /dev/null +++ b/test/historicstate/configs/test_8_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 1931, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_8_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 1934, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1608, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 1933, + "wssRpcPort": 1938 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/test_9_of_16.json b/test/historicstate/configs/test_9_of_16.json new file mode 100644 index 000000000..d53dca104 --- /dev/null +++ b/test/historicstate/configs/test_9_of_16.json @@ -0,0 +1,910 @@ +{ + "accounts": { + "0000000000000000000000000000000000000001": { + "precompiled": { + "linear": { + "base": 3000, + "word": 0 + }, + "name": "ecrecover" + } + }, + "0000000000000000000000000000000000000002": { + "precompiled": { + "linear": { + "base": 60, + "word": 12 + }, + "name": "sha256" + } + }, + "0000000000000000000000000000000000000003": { + "precompiled": { + "linear": { + "base": 600, + "word": 120 + }, + "name": "ripemd160" + } + }, + "0000000000000000000000000000000000000004": { + "precompiled": { + "linear": { + "base": 15, + "word": 3 + }, + "name": "identity" + } + }, + "0000000000000000000000000000000000000005": { + "precompiled": { + "name": "modexp", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000006": { + "precompiled": { + "linear": { + "base": 500, + "word": 0 + }, + "name": "alt_bn128_G1_add", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000007": { + "precompiled": { + "linear": { + "base": 40000, + "word": 0 + }, + "name": "alt_bn128_G1_mul", + "startingBlock": "0x2dc6c0" + } + }, + "0000000000000000000000000000000000000008": { + "precompiled": { + "name": "alt_bn128_pairing_product", + "startingBlock": "0x2dc6c0" + } + }, + "000000000000000000000000000000000000000A": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "readChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000B": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createFile", + "restrictAccess": [ + "69362535ec535F0643cBf62D16aDeDCAf32Ee6F7" + ], + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000C": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "uploadChunk", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000D": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "getFileSize", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000E": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteFile", + "startingBlock": "0x0" + } + }, + "000000000000000000000000000000000000000F": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "createDirectory", + "startingBlock": "0x0" + } + }, + "0000000000000000000000000000000000000010": { + "precompiled": { + "linear": { + "base": 15, + "word": 0 + }, + "name": "deleteDirectory", + "startingBlock": "0x0" + } + }, + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0150b461b06922a5030784ba888962c28bb1f188": { + "balance": "1000000000000000000000000000000" + }, + "0x03309956988ae70152ae4469daf99b0cac2306c5": { + "balance": "1000000000000000000000000000000" + }, + "0x06104a85a380895b6dd4030113806df2b044905e": { + "balance": "1000000000000000000000000000000" + }, + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { + "balance": "1000000000000000000000000000000" + }, + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { + "balance": "1000000000000000000000000000000" + }, + "0x099452fedc71897880f584b1bc1706efc4e76e36": { + "balance": "1000000000000000000000000000000" + }, + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { + "balance": "1000000000000000000000000000000" + }, + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { + "balance": "1000000000000000000000000000000" + }, + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { + "balance": "1000000000000000000000000000000" + }, + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { + "balance": "1000000000000000000000000000000" + }, + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { + "balance": "1000000000000000000000000000000" + }, + "0x13867af77a63048e17380e39248ada90521e97e4": { + "balance": "1000000000000000000000000000000" + }, + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { + "balance": "1000000000000000000000000000000" + }, + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { + "balance": "1000000000000000000000000000000" + }, + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { + "balance": "1000000000000000000000000000000" + }, + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { + "balance": "1000000000000000000000000000000" + }, + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { + "balance": "1000000000000000000000000000000" + }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { + "balance": "100000000000000000000000" + }, + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { + "balance": "1000000000000000000000000000000" + }, + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { + "balance": "1000000000000000000000000000000" + }, + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { + "balance": "1000000000000000000000000000000" + }, + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { + "balance": "1000000000000000000000000000000" + }, + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { + "balance": "1000000000000000000000000000000" + }, + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { + "balance": "1000000000000000000000000000000" + }, + "0x29d83322219fdfb821459d5fdf796360faf3166a": { + "balance": "1000000000000000000000000000000" + }, + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { + "balance": "1000000000000000000000000000000" + }, + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { + "balance": "1000000000000000000000000000000" + }, + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { + "balance": "1000000000000000000000000000000" + }, + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { + "balance": "1000000000000000000000000000000" + }, + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { + "balance": "1000000000000000000000000000000" + }, + "0x3760dc9594ccac0f33ade5cc5371402131696341": { + "balance": "1000000000000000000000000000000" + }, + "0x38855e430611bc179cd777a8704679ffc43921de": { + "balance": "1000000000000000000000000000000" + }, + "0x3a921471a2397644c37c88ef9572c421ab37145d": { + "balance": "1000000000000000000000000000000" + }, + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { + "balance": "1000000000000000000000000000000" + }, + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { + "balance": "1000000000000000000000000000000" + }, + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { + "balance": "1000000000000000000000000000000" + }, + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { + "balance": "1000000000000000000000000000000" + }, + "0x426ec5f07847674aada3856609d8baaa16805d88": { + "balance": "1000000000000000000000000000000" + }, + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { + "balance": "1000000000000000000000000000000" + }, + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { + "balance": "1000000000000000000000000000000" + }, + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { + "balance": "1000000000000000000000000000000" + }, + "0x4bf989fa6572af36b190032505506f1db888357f": { + "balance": "1000000000000000000000000000000" + }, + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { + "balance": "1000000000000000000000000000000" + }, + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { + "balance": "1000000000000000000000000000000" + }, + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { + "balance": "1000000000000000000000000000000" + }, + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { + "balance": "1000000000000000000000000000000" + }, + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { + "balance": "1000000000000000000000000000000" + }, + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { + "balance": "1000000000000000000000000000000" + }, + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { + "balance": "1000000000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC": { + "balance": "1000000000000000000000000" + }, + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { + "balance": "1000000000000000000000000000000" + }, + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { + "balance": "1000000000000000000000000000000" + }, + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { + "balance": "1000000000000000000000000000000" + }, + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { + "balance": "1000000000000000000000000000000" + }, + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { + "balance": "1000000000000000000000000000000" + }, + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { + "balance": "1000000000000000000000000000000" + }, + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { + "balance": "1000000000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594": { + "balance": "2000000000000000000000", + "code": "", + "nonce": "5076", + "storage": {} + }, + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { + "balance": "1000000000000000000000000000000" + }, + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { + "balance": "1000000000000000000000000000000" + }, + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { + "balance": "1000000000000000000000000000000" + }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { + "balance": "100000000000000000000000" + }, + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { + "balance": "1000000000000000000000000000000" + }, + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { + "balance": "1000000000000000000000000000000" + }, + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852": { + "balance": "1000000000000000000000" + }, + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { + "balance": "1000000000000000000000000000000" + }, + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { + "balance": "1000000000000000000000000000000" + }, + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { + "balance": "1000000000000000000000000000000" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "nonce": "0", + "storage": { + "0x0": "2868903936" + } + }, + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { + "balance": "1000000000000000000000000000000" + }, + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { + "balance": "1000000000000000000000000000000" + }, + "0x6b806862a977a0e22ed1752f858e5332647121c8": { + "balance": "1000000000000000000000000000000" + }, + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { + "balance": "1000000000000000000000000000000" + }, + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { + "balance": "1000000000000000000000000000000" + }, + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { + "balance": "1000000000000000000000000000000" + }, + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { + "balance": "1000000000000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E": { + "balance": "1000000000000000000000" + }, + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { + "balance": "1000000000000000000000000000000" + }, + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { + "balance": "1000000000000000000000000000000" + }, + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { + "balance": "1000000000000000000000000000000" + }, + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { + "balance": "1000000000000000000000000000000" + }, + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { + "balance": "1000000000000000000000000000000" + }, + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { + "balance": "1000000000000000000000000000000" + }, + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { + "balance": "1000000000000000000000000000000" + }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { + "balance": "100000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69": { + "balance": "1000000000000000000000000" + }, + "0x811d701d14539d190a8593fe901eafe8eff511f5": { + "balance": "1000000000000000000000000000000" + }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { + "balance": "100000000000000000000000" + }, + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { + "balance": "1000000000000000000000000000000" + }, + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { + "balance": "1000000000000000000000000000000" + }, + "0x863f816036e3cbba90855196c9d1e339fcff1650": { + "balance": "1000000000000000000000000000000" + }, + "0x87ea381878572d63b3453033d7540abddd191186": { + "balance": "1000000000000000000000000000000" + }, + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { + "balance": "1000000000000000000000000000000" + }, + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { + "balance": "1000000000000000000000000000000" + }, + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { + "balance": "1000000000000000000000000000000" + }, + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { + "balance": "1000000000000000000000000000000" + }, + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { + "balance": "1000000000000000000000000000000" + }, + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { + "balance": "1000000000000000000000000000000" + }, + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { + "balance": "1000000000000000000000000000000000000000000000000000000000" + }, + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { + "balance": "1000000000000000000000000000000" + }, + "0x96672f9e982936e1904b15c948cc81bf18027db6": { + "balance": "1000000000000000000000000000000" + }, + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { + "balance": "1000000000000000000000000000000" + }, + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { + "balance": "1000000000000000000000000000000" + }, + "0x9b77f28285a49601169a33332f08aa309d97edd0": { + "balance": "1000000000000000000000000000000" + }, + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { + "balance": "1000000000000000000000000000000" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "nonce": "0", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + } + }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "nonce": "0", + "storage": { + "0x0": "1000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "nonce": "0", + "storage": {} + }, + "0xa096b05a489831db893fc53aacc7ed20efb36382": { + "balance": "1000000000000000000000000000000" + }, + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { + "balance": "1000000000000000000000000000000" + }, + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { + "balance": "1000000000000000000000000000000" + }, + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { + "balance": "1000000000000000000000000000000" + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { + "balance": "1000000000000000000000000000000" + }, + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { + "balance": "1000000000000000000000000000000" + }, + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { + "balance": "1000000000000000000000000000000" + }, + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { + "balance": "1000000000000000000000000000000" + }, + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { + "balance": "1000000000000000000000000000000" + }, + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { + "balance": "1000000000000000000000000000000" + }, + "0xac5df92da5171ba24a9618018b4f79494040334b": { + "balance": "1000000000000000000000000000000" + }, + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { + "balance": "1000000000000000000000000000000" + }, + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { + "balance": "1000000000000000000000000000000" + }, + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { + "balance": "1000000000000000000000000000000" + }, + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { + "balance": "1000000000000000000000000000000" + }, + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { + "balance": "1000000000000000000000000000000" + }, + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { + "balance": "1000000000000000000000000000000" + }, + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { + "balance": "1000000000000000000000000000000" + }, + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { + "balance": "1000000000000000000000000000000" + }, + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { + "balance": "1000000000000000000000000000000" + }, + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { + "balance": "1000000000000000000000000000000" + }, + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { + "balance": "1000000000000000000000000000000" + }, + "0xc3820490201e94d76b44655d2df713fec29d9795": { + "balance": "1000000000000000000000000000000" + }, + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { + "balance": "1000000000000000000000000000000" + }, + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { + "balance": "1000000000000000000000000000000" + }, + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { + "balance": "1000000000000000000000000000000" + }, + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { + "balance": "1000000000000000000000000000000" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { + "balance": "100000000000000000000000" + }, + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { + "balance": "1000000000000000000000000000000" + }, + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { + "balance": "1000000000000000000000000000000" + }, + "0xd1b6c947fb14060b38945584714491592e84875d": { + "balance": "1000000000000000000000000000000" + }, + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { + "balance": "1000000000000000000000000000000" + }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { + "balance": "100000000000000000000000" + }, + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { + "balance": "1000000000000000000000000000000" + }, + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { + "balance": "1000000000000000000000000000000" + }, + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { + "balance": "1000000000000000000000000000000" + }, + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { + "balance": "1000000000000000000000000000000" + }, + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { + "balance": "1000000000000000000000000000000" + }, + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { + "balance": "1000000000000000000000000000000" + }, + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { + "balance": "1000000000000000000000000000000" + }, + "0xde14aca36acc62c305a7ee571da37840a408e600": { + "balance": "1000000000000000000000000000000" + }, + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { + "balance": "1000000000000000000000000000000" + }, + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { + "balance": "1000000000000000000000000000000" + }, + "0xe1607990ce800407e3c206e58de4917977181d4d": { + "balance": "1000000000000000000000000000000" + }, + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { + "balance": "1000000000000000000000000000000" + }, + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { + "balance": "1000000000000000000000000000000" + }, + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { + "balance": "1000000000000000000000000000000" + }, + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { + "balance": "1000000000000000000000000000000" + }, + "0xe8b57f330d56081c856e618210fbedb414925ff0": { + "balance": "1000000000000000000000000000000" + }, + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { + "balance": "1000000000000000000000000000000" + }, + "0xf184c8c243a178c1748a0af45caedeca476105b4": { + "balance": "1000000000000000000000000000000" + }, + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { + "balance": "1000000000000000000000000000000" + }, + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { + "balance": "1000000000000000000000000000000" + }, + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { + "balance": "1000000000000000000000000000000" + }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { + "balance": "100000000000000000000000" + }, + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { + "balance": "1000000000000000000000000000000" + }, + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { + "balance": "1000000000000000000000000000000" + }, + "0xfaa1038074941571524934ba52d312e88b3577f5": { + "balance": "1000000000000000000000000000000" + }, + "0xfe14077c26a507496b7208384d459e21c49c4212": { + "balance": "1000000000000000000000000000000" + }, + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { + "balance": "1000000000000000000000000000000" + }, + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { + "balance": "1000000000000000000000000000000" + }, + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { + "balance": "1000000000000000000000000000000" + }, + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { + "balance": "1000000000000000000000000000000" + } + }, + "genesis": { + "author": "0x0000000000000000000000000000000000000001", + "difficulty": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "nonce": "0x0000000000000042", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" + }, + "params": { + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "accountStartNonce": "0x00", + "blockReward": "0x4563918244F40000", + "byzantiumForkBlock": "0x0", + "chainID": "0x12345", + "constantinopleForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "externalGasDifficulty": "0x01", + "gasLimitBoundDivisor": "0x0400", + "homesteadForkBlock": "0x0", + "maxGasLimit": "0xFFFFFFFFF", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0xFFFFFFFFF", + "minimumDifficulty": "0x0", + "networkID": "12313219", + "tieBreakingGas": false + }, + "sealEngine": "Ethash", + "skaleConfig": { + "nodeInfo": { + "basePort": 2031, + "bindIP": "0.0.0.0", + "collectionDuration": 10, + "collectionQueueSize": 2, + "db-path": "/tmp/test_eth_9_of_16", + "ecdsaKeyName": "", + "httpRpcPort": 2034, + "httpsRpcPort": 1239, + "logLevel": "info", + "logLevelProposal": "info", + "maxCacheSize": 2000, + "maxOpenLeveldbFiles": 25, + "minCacheSize": 1000, + "nodeID": 1609, + "nodeName": "Node1", + "rotateAfterBlock": 0, + "testSignatures": true, + "transactionQueueSize": 10000, + "wsRpcPort": 2033, + "wssRpcPort": 2038 + }, + "sChain": { + "EIP1559TransactionsPatchTimestamp": 1, + "contractStorageLimit": 10000000000, + "contractStoragePatchTimestamp": 1, + "contractStorageZeroValuePatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "emptyBlockIntervalMs": 10000, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "levelDBReopenIntervalMs": 1, + "multiTransactionMode": false, + "nodes": [ + { + "basePort": 1231, + "ip": "127.0.0.1", + "nodeID": 1601, + "publicKey": "", + "schainIndex": 1 + }, + { + "basePort": 1331, + "ip": "127.0.0.1", + "nodeID": 1602, + "publicKey": "", + "schainIndex": 2 + }, + { + "basePort": 1431, + "ip": "127.0.0.1", + "nodeID": 1603, + "publicKey": "", + "schainIndex": 3 + }, + { + "basePort": 1531, + "ip": "127.0.0.1", + "nodeID": 1604, + "publicKey": "", + "schainIndex": 4 + }, + { + "basePort": 1631, + "ip": "127.0.0.1", + "nodeID": 1605, + "publicKey": "", + "schainIndex": 5 + }, + { + "basePort": 1731, + "ip": "127.0.0.1", + "nodeID": 1606, + "publicKey": "", + "schainIndex": 6 + }, + { + "basePort": 1831, + "ip": "127.0.0.1", + "nodeID": 1607, + "publicKey": "", + "schainIndex": 7 + }, + { + "basePort": 1931, + "ip": "127.0.0.1", + "nodeID": 1608, + "publicKey": "", + "schainIndex": 8 + }, + { + "basePort": 2031, + "ip": "127.0.0.1", + "nodeID": 1609, + "publicKey": "", + "schainIndex": 9 + }, + { + "basePort": 2131, + "ip": "127.0.0.1", + "nodeID": 1610, + "publicKey": "", + "schainIndex": 10 + }, + { + "basePort": 2231, + "ip": "127.0.0.1", + "nodeID": 1611, + "publicKey": "", + "schainIndex": 11 + }, + { + "basePort": 2331, + "ip": "127.0.0.1", + "nodeID": 1612, + "publicKey": "", + "schainIndex": 12 + }, + { + "basePort": 2431, + "ip": "127.0.0.1", + "nodeID": 1613, + "publicKey": "", + "schainIndex": 13 + }, + { + "basePort": 2531, + "ip": "127.0.0.1", + "nodeID": 1614, + "publicKey": "", + "schainIndex": 14 + }, + { + "basePort": 2631, + "ip": "127.0.0.1", + "nodeID": 1615, + "publicKey": "", + "schainIndex": 15 + }, + { + "basePort": 2731, + "ip": "127.0.0.1", + "nodeID": 1616, + "publicKey": "", + "schainIndex": 16 + } + ], + "powCheckPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "schainID": 5, + "schainName": "TestChain", + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "skipInvalidTransactionsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1 + } + }, + "unddos": { + "origins": [ + { + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535, + "origin": [ + "*" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/historicstate/configs/testeth_config.json b/test/historicstate/configs/testeth_config.json new file mode 100644 index 000000000..b6abe0a96 --- /dev/null +++ b/test/historicstate/configs/testeth_config.json @@ -0,0 +1,354 @@ +{ + "unddos": { + "origins": [ + { + "origin": [ "*" ], + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535 + } + ] + }, + "sealEngine": "Ethash", + "params": { + "accountStartNonce": "0x00", + "homesteadForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "byzantiumForkBlock": "0x0", + "constantinopleForkBlock": "0x0", + "networkID": "12313219", + "chainID": "0x12345", + "maximumExtraDataSize": "0x20", + "tieBreakingGas": false, + "minGasLimit": "0xFFFFFFFFF", + "maxGasLimit": "0xFFFFFFFFF", + "gasLimitBoundDivisor": "0x0400", + "minimumDifficulty": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "blockReward": "0x4563918244F40000", + "externalGasDifficulty": "0x01" + }, + "genesis": { + "nonce": "0x0000000000000042", + "difficulty": "0x0", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "author": "0x0000000000000000000000000000000000000001", + "timestamp": "0x00", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF" + }, + "accounts": { + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852":{ + "balance": "1000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E":{ + "balance": "1000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69":{ + "balance": "1000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC":{ + "balance": "1000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594":{ + "balance": "2000000000000000000000", + "nonce": "5076", + "code": "", + "storage":{} + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { "balance": "1000000000000000000000000000000" } , + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { "balance": "1000000000000000000000000000000" } , + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { "balance": "1000000000000000000000000000000" } , + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { "balance": "1000000000000000000000000000000" } , + "0x863f816036e3cbba90855196c9d1e339fcff1650": { "balance": "1000000000000000000000000000000" } , + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { "balance": "1000000000000000000000000000000" } , + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { "balance": "1000000000000000000000000000000" } , + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { "balance": "1000000000000000000000000000000" } , + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { "balance": "1000000000000000000000000000000" } , + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { "balance": "1000000000000000000000000000000" } , + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { "balance": "1000000000000000000000000000000" } , + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { "balance": "1000000000000000000000000000000" } , + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { "balance": "1000000000000000000000000000000" } , + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { "balance": "1000000000000000000000000000000" } , + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { "balance": "1000000000000000000000000000000" } , + "0x9b77f28285a49601169a33332f08aa309d97edd0": { "balance": "1000000000000000000000000000000" } , + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { "balance": "1000000000000000000000000000000" } , + "0x811d701d14539d190a8593fe901eafe8eff511f5": { "balance": "1000000000000000000000000000000" } , + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { "balance": "1000000000000000000000000000000" } , + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { "balance": "1000000000000000000000000000000" } , + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { "balance": "1000000000000000000000000000000" } , + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { "balance": "1000000000000000000000000000000" } , + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { "balance": "1000000000000000000000000000000" } , + "0x38855e430611bc179cd777a8704679ffc43921de": { "balance": "1000000000000000000000000000000" } , + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { "balance": "1000000000000000000000000000000" } , + "0x6b806862a977a0e22ed1752f858e5332647121c8": { "balance": "1000000000000000000000000000000" } , + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { "balance": "1000000000000000000000000000000" } , + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { "balance": "1000000000000000000000000000000" } , + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { "balance": "1000000000000000000000000000000" } , + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { "balance": "1000000000000000000000000000000" } , + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { "balance": "1000000000000000000000000000000" } , + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { "balance": "1000000000000000000000000000000" } , + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { "balance": "1000000000000000000000000000000" } , + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { "balance": "1000000000000000000000000000000" } , + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { "balance": "1000000000000000000000000000000" } , + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { "balance": "1000000000000000000000000000000" } , + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { "balance": "1000000000000000000000000000000" } , + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { "balance": "1000000000000000000000000000000" } , + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { "balance": "1000000000000000000000000000000" } , + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { "balance": "1000000000000000000000000000000" } , + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { "balance": "1000000000000000000000000000000" } , + "0x13867af77a63048e17380e39248ada90521e97e4": { "balance": "1000000000000000000000000000000" } , + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { "balance": "1000000000000000000000000000000" } , + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { "balance": "1000000000000000000000000000000" } , + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { "balance": "1000000000000000000000000000000" } , + "0x87ea381878572d63b3453033d7540abddd191186": { "balance": "1000000000000000000000000000000" } , + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { "balance": "1000000000000000000000000000000" } , + "0x06104a85a380895b6dd4030113806df2b044905e": { "balance": "1000000000000000000000000000000" } , + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { "balance": "1000000000000000000000000000000" } , + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { "balance": "1000000000000000000000000000000" } , + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { "balance": "1000000000000000000000000000000" } , + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { "balance": "1000000000000000000000000000000" } , + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { "balance": "1000000000000000000000000000000" } , + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { "balance": "1000000000000000000000000000000" } , + "0x03309956988ae70152ae4469daf99b0cac2306c5": { "balance": "1000000000000000000000000000000" } , + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { "balance": "1000000000000000000000000000000" } , + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { "balance": "1000000000000000000000000000000" } , + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { "balance": "1000000000000000000000000000000" } , + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { "balance": "1000000000000000000000000000000" } , + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { "balance": "1000000000000000000000000000000" } , + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { "balance": "1000000000000000000000000000000" } , + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { "balance": "1000000000000000000000000000000" } , + "0xa096b05a489831db893fc53aacc7ed20efb36382": { "balance": "1000000000000000000000000000000" } , + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { "balance": "1000000000000000000000000000000" } , + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { "balance": "1000000000000000000000000000000" } , + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { "balance": "1000000000000000000000000000000" } , + "0xe1607990ce800407e3c206e58de4917977181d4d": { "balance": "1000000000000000000000000000000" } , + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { "balance": "1000000000000000000000000000000" } , + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { "balance": "1000000000000000000000000000000" } , + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { "balance": "1000000000000000000000000000000" } , + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { "balance": "1000000000000000000000000000000" } , + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { "balance": "1000000000000000000000000000000" } , + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { "balance": "1000000000000000000000000000000" } , + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { "balance": "1000000000000000000000000000000" } , + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { "balance": "1000000000000000000000000000000" } , + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { "balance": "1000000000000000000000000000000" } , + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { "balance": "1000000000000000000000000000000" } , + "0xe8b57f330d56081c856e618210fbedb414925ff0": { "balance": "1000000000000000000000000000000" } , + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { "balance": "1000000000000000000000000000000" } , + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { "balance": "1000000000000000000000000000000" } , + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { "balance": "1000000000000000000000000000000" } , + "0x3760dc9594ccac0f33ade5cc5371402131696341": { "balance": "1000000000000000000000000000000" } , + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { "balance": "1000000000000000000000000000000" } , + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { "balance": "1000000000000000000000000000000" } , + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { "balance": "1000000000000000000000000000000" } , + "0xfaa1038074941571524934ba52d312e88b3577f5": { "balance": "1000000000000000000000000000000" } , + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { "balance": "1000000000000000000000000000000" } , + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { "balance": "1000000000000000000000000000000" } , + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { "balance": "1000000000000000000000000000000" } , + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { "balance": "1000000000000000000000000000000" } , + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { "balance": "1000000000000000000000000000000" } , + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { "balance": "1000000000000000000000000000000" } , + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { "balance": "1000000000000000000000000000000" } , + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { "balance": "1000000000000000000000000000000" } , + "0x4bf989fa6572af36b190032505506f1db888357f": { "balance": "1000000000000000000000000000000" } , + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { "balance": "1000000000000000000000000000000" } , + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { "balance": "1000000000000000000000000000000" } , + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { "balance": "1000000000000000000000000000000" } , + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { "balance": "1000000000000000000000000000000" } , + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { "balance": "1000000000000000000000000000000" } , + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { "balance": "1000000000000000000000000000000" } , + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { "balance": "1000000000000000000000000000000" } , + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { "balance": "1000000000000000000000000000000" } , + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { "balance": "1000000000000000000000000000000" } , + "0xf184c8c243a178c1748a0af45caedeca476105b4": { "balance": "1000000000000000000000000000000" } , + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { "balance": "1000000000000000000000000000000" } , + "0x29d83322219fdfb821459d5fdf796360faf3166a": { "balance": "1000000000000000000000000000000" } , + "0x3a921471a2397644c37c88ef9572c421ab37145d": { "balance": "1000000000000000000000000000000" } , + "0x426ec5f07847674aada3856609d8baaa16805d88": { "balance": "1000000000000000000000000000000" } , + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { "balance": "1000000000000000000000000000000" } , + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { "balance": "1000000000000000000000000000000" } , + "0xd1b6c947fb14060b38945584714491592e84875d": { "balance": "1000000000000000000000000000000" } , + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { "balance": "1000000000000000000000000000000" } , + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { "balance": "1000000000000000000000000000000" } , + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { "balance": "1000000000000000000000000000000" } , + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { "balance": "1000000000000000000000000000000" } , + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { "balance": "1000000000000000000000000000000" } , + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { "balance": "1000000000000000000000000000000" } , + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { "balance": "1000000000000000000000000000000" } , + "0xac5df92da5171ba24a9618018b4f79494040334b": { "balance": "1000000000000000000000000000000" } , + "0x0150b461b06922a5030784ba888962c28bb1f188": { "balance": "1000000000000000000000000000000" } , + "0xde14aca36acc62c305a7ee571da37840a408e600": { "balance": "1000000000000000000000000000000" } , + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { "balance": "1000000000000000000000000000000" } , + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { "balance": "1000000000000000000000000000000" } , + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { "balance": "1000000000000000000000000000000" } , + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { "balance": "1000000000000000000000000000000" } , + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { "balance": "1000000000000000000000000000000" } , + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { "balance": "1000000000000000000000000000000" } , + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { "balance": "1000000000000000000000000000000" } , + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { "balance": "1000000000000000000000000000000" } , + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { "balance": "1000000000000000000000000000000" } , + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { "balance": "1000000000000000000000000000000" } , + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { "balance": "1000000000000000000000000000000" } , + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { "balance": "1000000000000000000000000000000" } , + "0x96672f9e982936e1904b15c948cc81bf18027db6": { "balance": "1000000000000000000000000000000" } , + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { "balance": "1000000000000000000000000000000" } , + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { "balance": "1000000000000000000000000000000" } , + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { "balance": "1000000000000000000000000000000" } , + "0xc3820490201e94d76b44655d2df713fec29d9795": { "balance": "1000000000000000000000000000000" } , + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { "balance": "1000000000000000000000000000000" } , + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { "balance": "1000000000000000000000000000000" } , + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { "balance": "1000000000000000000000000000000" } , + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { "balance": "1000000000000000000000000000000" } , + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { "balance": "1000000000000000000000000000000" } , + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { "balance": "1000000000000000000000000000000" } , + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { "balance": "1000000000000000000000000000000" } , + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { "balance": "1000000000000000000000000000000" } , + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { "balance": "1000000000000000000000000000000" } , + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { "balance": "1000000000000000000000000000000" } , + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { "balance": "1000000000000000000000000000000" } , + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { "balance": "1000000000000000000000000000000" } , + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { "balance": "1000000000000000000000000000000" } , + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { "balance": "1000000000000000000000000000000" } , + "0xfe14077c26a507496b7208384d459e21c49c4212": { "balance": "1000000000000000000000000000000" } , + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { "balance": "1000000000000000000000000000000" } , + "0x099452fedc71897880f584b1bc1706efc4e76e36": { "balance": "1000000000000000000000000000000" } , + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { "balance": "1000000000000000000000000000000000000000000000000000000000" } , + "0000000000000000000000000000000000000001": { "precompiled": { "name": "ecrecover", "linear": { "base": 3000, "word": 0 } } }, + "0000000000000000000000000000000000000002": { "precompiled": { "name": "sha256", "linear": { "base": 60, "word": 12 } } }, + "0000000000000000000000000000000000000003": { "precompiled": { "name": "ripemd160", "linear": { "base": 600, "word": 120 } } }, + "0000000000000000000000000000000000000004": { "precompiled": { "name": "identity", "linear": { "base": 15, "word": 3 } } }, + "0000000000000000000000000000000000000005": { "precompiled": { "name": "modexp", "startingBlock" : "0x2dc6c0" } }, + "0000000000000000000000000000000000000006": { "precompiled": { "name": "alt_bn128_G1_add", "startingBlock" : "0x2dc6c0", "linear": { "base": 500, "word": 0 } } }, + "0000000000000000000000000000000000000007": { "precompiled": { "name": "alt_bn128_G1_mul", "startingBlock" : "0x2dc6c0", "linear": { "base": 40000, "word": 0 } } }, + "0000000000000000000000000000000000000008": { "precompiled": { "name": "alt_bn128_pairing_product", "startingBlock" : "0x2dc6c0" } }, + "000000000000000000000000000000000000000A": { "precompiled": { "name": "readChunk", "linear": { "base": 15, "word": 0 },"startingBlock" : "0x0"} }, + "000000000000000000000000000000000000000B": { "precompiled": { "name": "createFile", "linear": { "base": 15, "word": 0 },"startingBlock" : "0x0", "restrictAccess": ["69362535ec535F0643cBf62D16aDeDCAf32Ee6F7"] } }, + "000000000000000000000000000000000000000C": { "precompiled": { "name": "uploadChunk", "linear": { "base": 15, "word": 0 },"startingBlock" : "0x0"} }, + "000000000000000000000000000000000000000D": { "precompiled": { "name": "getFileSize", "linear": { "base": 15, "word": 0 },"startingBlock" : "0x0"} }, + "000000000000000000000000000000000000000E": { "precompiled": { "name": "deleteFile", "linear": { "base": 15, "word": 0 },"startingBlock" : "0x0"} }, + "000000000000000000000000000000000000000F": { "precompiled": { "name": "createDirectory", "linear": { "base": 15, "word": 0 },"startingBlock" : "0x0"} }, + "0000000000000000000000000000000000000010": { "precompiled": { "name": "deleteDirectory", "linear": { "base": 15, "word": 0 },"startingBlock" : "0x0"} }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "storage": { + "0x0": "2868903936" + }, + "nonce": "0" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "storage": { + "0x0": "2868903936" + }, + "nonce": "0" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "storage": { + "0x0": "2868903936" + }, + "nonce": "0" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + }, + "nonce": "0" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { "balance": "100000000000000000000000" }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { "balance": "100000000000000000000000" }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { "balance": "100000000000000000000000" }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { "balance": "100000000000000000000000" }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { "balance": "100000000000000000000000" }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { "balance": "100000000000000000000000" }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { "balance": "100000000000000000000000" }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "nonce": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "nonce": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "storage": { + "0x0": "1000000", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "nonce": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "storage": {} + } + }, + + "skaleConfig": { + "nodeInfo": { + "nodeName": "Node1", + "nodeID": 1112, + "bindIP": "0.0.0.0", + "basePort": 1231, + "httpRpcPort": 1234, + "httpsRpcPort": 1239, + "wsRpcPort": 1233, + "wssRpcPort": 1238, + "logLevel": "info", + "logLevelProposal": "info", + "rotateAfterBlock": 0, + "ecdsaKeyName": "", + "minCacheSize": 1000, + "maxCacheSize": 2000, + "collectionQueueSize": 2, + "collectionDuration": 10, + "transactionQueueSize": 10000, + "maxOpenLeveldbFiles": 25, + "testSignatures": true + }, + "sChain": { + "schainName": "TestChain", + "schainID": 5, + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "contractStorageLimit": 10000000000, + "emptyBlockIntervalMs": 10000, + "contractStorageZeroValuePatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "contractStoragePatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "powCheckPatchTimestamp": 1, + "skipInvalidTransactionsPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "EIP1559TransactionsPatchTimestamp": 1, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "multiTransactionMode": false, + "levelDBReopenIntervalMs": 1, + "nodes": [ + { "nodeID": 1112, "ip": "127.0.0.1", "basePort": 1231, "schainIndex" : 1, "publicKey":""} + ] + } + } +} + + + diff --git a/test/historicstate/configs/testeth_config_mtm.json b/test/historicstate/configs/testeth_config_mtm.json new file mode 100644 index 000000000..b5c44cee8 --- /dev/null +++ b/test/historicstate/configs/testeth_config_mtm.json @@ -0,0 +1,354 @@ +{ + "unddos": { + "origins": [ + { + "origin": [ "*" ], + "ban_lengthy": 0, + "ban_peak": 0, + "max_calls_per_minute": 1000000000, + "max_calls_per_second": 1000000000, + "max_ws_conn": 65535 + } + ] + }, + "sealEngine": "Ethash", + "params": { + "accountStartNonce": "0x00", + "homesteadForkBlock": "0x0", + "daoHardforkBlock": "0x0", + "EIP150ForkBlock": "0x00", + "EIP158ForkBlock": "0x00", + "byzantiumForkBlock": "0x0", + "constantinopleForkBlock": "0x0", + "networkID": "12313219", + "chainID": "0x12345", + "maximumExtraDataSize": "0x20", + "tieBreakingGas": false, + "minGasLimit": "0xFFFFFFFFF", + "maxGasLimit": "0xFFFFFFFFF", + "gasLimitBoundDivisor": "0x0400", + "minimumDifficulty": "0x0", + "difficultyBoundDivisor": "0x0800", + "durationLimit": "0x0d", + "blockReward": "0x4563918244F40000", + "externalGasDifficulty": "0x01" + }, + "genesis": { + "nonce": "0x0000000000000042", + "difficulty": "0x0", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000abc", + "author": "0x0000000000000000000000000000000000000001", + "timestamp": "0x00", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0xFFFFFFFFF" + }, + "accounts": { + "0x66c5a87f4a49DD75e970055A265E8dd5C3F8f852":{ + "balance": "1000000000000000000000" + }, + "0x6d80aAC61F6d92c7F4A3c412850474ba963B698E":{ + "balance": "1000000000000000000000" + }, + "0x7e7E68F04D1799Fa25C8cff57314c8a5d3942e69":{ + "balance": "1000000000000000000000000" + }, + "0x5EF25557E2ed6AFfF321B266C93e95A0B4B05AbC":{ + "balance": "1000000000000000000000000" + }, + "0x6196d135CdDb9d73A0756C1E44b5b02B11acf594":{ + "balance": "2000000000000000000000", + "nonce": "5076", + "code": "", + "storage":{} + }, + "0xa68f946090c600eda6f139783077ee802afeb990": { "balance": "1000000000000000000000000000000" } , + "0x88fd5e01078629cc194c933d9631b9448fe10b1d": { "balance": "1000000000000000000000000000000" } , + "0x77a0bc73442d3d9cb993e8d9752f95babf0ccaa6": { "balance": "1000000000000000000000000000000" } , + "0x0aa6a44690ef52354e976990292cf9c5cd36ad59": { "balance": "1000000000000000000000000000000" } , + "0x863f816036e3cbba90855196c9d1e339fcff1650": { "balance": "1000000000000000000000000000000" } , + "0xe3cc6ec63b5652d1594bc63bb293f4e80f76dbdd": { "balance": "1000000000000000000000000000000" } , + "0x94c6e5746971d6aebeaa42cbbe2feca0f6b5b24f": { "balance": "1000000000000000000000000000000" } , + "0x3f5bdf5d4c274c82b8d17aa2810b00d2cf050f24": { "balance": "1000000000000000000000000000000" } , + "0xbf5aa678b969c0871e2fbcf09c3dbb5d5865ac1e": { "balance": "1000000000000000000000000000000" } , + "0xa6d50055592cecb795bc1ed3b9ea57ed426b0b7c": { "balance": "1000000000000000000000000000000" } , + "0xb70603c505f85130b5b2e73cd82d196dfd7d8b5e": { "balance": "1000000000000000000000000000000" } , + "0x079cf317ef40b16141784b6fabff812d64f7c0fd": { "balance": "1000000000000000000000000000000" } , + "0x482d7f53cba6ae73a354533673c48e2dfd560949": { "balance": "1000000000000000000000000000000" } , + "0xa2969e82619021ea407338f8bdf7c6f2bd679673": { "balance": "1000000000000000000000000000000" } , + "0x28353685b0b986a724b92113debb3d8cd9a6b263": { "balance": "1000000000000000000000000000000" } , + "0x9b77f28285a49601169a33332f08aa309d97edd0": { "balance": "1000000000000000000000000000000" } , + "0xd2cd302eb060e375a65d65946692a3ac2d838d35": { "balance": "1000000000000000000000000000000" } , + "0x811d701d14539d190a8593fe901eafe8eff511f5": { "balance": "1000000000000000000000000000000" } , + "0x194cb9991d3d94c43e400becf21dfea45e7b3b4c": { "balance": "1000000000000000000000000000000" } , + "0xf36620e71327f4a55d550d46e030ccf0c728f154": { "balance": "1000000000000000000000000000000" } , + "0x661bda4daeba3ce9ac2aa30b80d463580f90d31a": { "balance": "1000000000000000000000000000000" } , + "0xdc6a269c58e58a93a22b5df8cdf1af630c47481f": { "balance": "1000000000000000000000000000000" } , + "0x6923877b65e24966efa9efd1207822fa2eaf601a": { "balance": "1000000000000000000000000000000" } , + "0x38855e430611bc179cd777a8704679ffc43921de": { "balance": "1000000000000000000000000000000" } , + "0xc12bcedd9bcad9120150122cd50f39576ecccc08": { "balance": "1000000000000000000000000000000" } , + "0x6b806862a977a0e22ed1752f858e5332647121c8": { "balance": "1000000000000000000000000000000" } , + "0x8e6081e272c8f4d49f5b29157b52f68cbd6307ad": { "balance": "1000000000000000000000000000000" } , + "0x7685d04f0b7657017b77efa004a14ff9f022acab": { "balance": "1000000000000000000000000000000" } , + "0xabf920b89f5a2487fdb70be17fd01a99a0602e62": { "balance": "1000000000000000000000000000000" } , + "0xd3d38f4cb0aeb4c7c2527ddaeec2ab3b910c8528": { "balance": "1000000000000000000000000000000" } , + "0xaa6a87bbb74bc1f3cb40c1efb7fc171ee6407560": { "balance": "1000000000000000000000000000000" } , + "0x138ea4bdf0382c2deffd5b0bff0afe59f471467f": { "balance": "1000000000000000000000000000000" } , + "0xe083a100d51fc4f38aae4a3a68404c36ad96c612": { "balance": "1000000000000000000000000000000" } , + "0xe91ac72a568e752eb7c9f5235100586ce97c8cc1": { "balance": "1000000000000000000000000000000" } , + "0xd951bf4cff429062702a7d8699a5f0bf14845d9b": { "balance": "1000000000000000000000000000000" } , + "0x16e8c390f8e576161cfe966f2c3e5dd303eb9039": { "balance": "1000000000000000000000000000000" } , + "0xe25e5b63dfd4cf59b81eddf64f1195858634b8a6": { "balance": "1000000000000000000000000000000" } , + "0xd23cd6a9ddcc3470300003621bbac1e06a7919d5": { "balance": "1000000000000000000000000000000" } , + "0x32ea0400dc2d20664cc4744b2fab04ecb709445c": { "balance": "1000000000000000000000000000000" } , + "0xb64989ab32b089da3da103b93e6781d6d5dd10b4": { "balance": "1000000000000000000000000000000" } , + "0x6cd5e637266e18d3e888ee99451eb828c6b491f4": { "balance": "1000000000000000000000000000000" } , + "0x13867af77a63048e17380e39248ada90521e97e4": { "balance": "1000000000000000000000000000000" } , + "0x5d012c13b2854bda8b7b6580e97e52751884f827": { "balance": "1000000000000000000000000000000" } , + "0x006d8e49ce0b9eb5646e34a4d91934801b9044fd": { "balance": "1000000000000000000000000000000" } , + "0x3bcca8a8471d55a1a668bc163c0336e4a57e5c99": { "balance": "1000000000000000000000000000000" } , + "0x87ea381878572d63b3453033d7540abddd191186": { "balance": "1000000000000000000000000000000" } , + "0x3d46ee560227c1d73cd6042b47fc8fddd8a06ecb": { "balance": "1000000000000000000000000000000" } , + "0x06104a85a380895b6dd4030113806df2b044905e": { "balance": "1000000000000000000000000000000" } , + "0x12d5d7340a93be7be28ea7a3ae198242f8e1282c": { "balance": "1000000000000000000000000000000" } , + "0x605ba4a05d779f9869bd9a10234c22f516766cfe": { "balance": "1000000000000000000000000000000" } , + "0xdee32ae508cf783f53ab8bc39d878fe323cdfae3": { "balance": "1000000000000000000000000000000" } , + "0x5a3adad4382b3eb1e0c65f2de2845901081039b5": { "balance": "1000000000000000000000000000000" } , + "0x48acbd6a2724eadcc2a11144ab84b6a617d1a241": { "balance": "1000000000000000000000000000000" } , + "0xdc6d02ef4003a4f2d0ccff65ae1a2d8157fbb23e": { "balance": "1000000000000000000000000000000" } , + "0x03309956988ae70152ae4469daf99b0cac2306c5": { "balance": "1000000000000000000000000000000" } , + "0x57829f2ecca390cd9d1c41f92328bad4d1073bbb": { "balance": "1000000000000000000000000000000" } , + "0xb67e6f4a21f93c250fa6ff0cb142bd14dd4ca8eb": { "balance": "1000000000000000000000000000000" } , + "0x7525198d8cd1121d57358a0b0ed037e924581a76": { "balance": "1000000000000000000000000000000" } , + "0x13d19c55ee0a212249d26b9d741ff6d7f416db01": { "balance": "1000000000000000000000000000000" } , + "0x2d93455b07bccf38e8d019f7f43a2c2d70b46b4e": { "balance": "1000000000000000000000000000000" } , + "0x54e228d8fea148cfe2b109b3b152ff21321d09a2": { "balance": "1000000000000000000000000000000" } , + "0xbf2d8cebdeeb8ad8fed7b2a75f35922106f8d75c": { "balance": "1000000000000000000000000000000" } , + "0xa096b05a489831db893fc53aacc7ed20efb36382": { "balance": "1000000000000000000000000000000" } , + "0xd90045420b8abc37b3f9304ed2b385fc1b7fa8c5": { "balance": "1000000000000000000000000000000" } , + "0x3ffe1c9183e0f97f52a816405a7d2350624ec88b": { "balance": "1000000000000000000000000000000" } , + "0xe372377decb3bdc0c7f5272d38ce0ba2a54934fe": { "balance": "1000000000000000000000000000000" } , + "0xe1607990ce800407e3c206e58de4917977181d4d": { "balance": "1000000000000000000000000000000" } , + "0xc7865200e8e51ba1c8d695f327deed432930f2cc": { "balance": "1000000000000000000000000000000" } , + "0x85b33f0853ab8eaa4e602bdfd724d44bc2731e90": { "balance": "1000000000000000000000000000000" } , + "0xd2e75c41ced8699e3176f6e335355701a2568b7b": { "balance": "1000000000000000000000000000000" } , + "0x62971de462ea1ec0d3b43a6a85b6fb975e6c6f64": { "balance": "1000000000000000000000000000000" } , + "0xcc33e23b04b74f7ba8fbe315083182224af973fa": { "balance": "1000000000000000000000000000000" } , + "0x49ef89840e400026eb5c8d79bd1b0adc152fe86d": { "balance": "1000000000000000000000000000000" } , + "0x62cf32dfb9eb6358dc5deb006aef1d75fb153e5f": { "balance": "1000000000000000000000000000000" } , + "0x733ad609ef2e742334d96266fbc13733f1cf5e4a": { "balance": "1000000000000000000000000000000" } , + "0x76b545cb6a2fc671f741950eeb27627e69a1e69b": { "balance": "1000000000000000000000000000000" } , + "0xce1c62d0a77600fb2f959b4da76fcb9b3b9430a3": { "balance": "1000000000000000000000000000000" } , + "0xe8b57f330d56081c856e618210fbedb414925ff0": { "balance": "1000000000000000000000000000000" } , + "0x30aaab366dfac8331f3e827495c789cde9b437c0": { "balance": "1000000000000000000000000000000" } , + "0x54db355342c35085a1a53184162b2fddd0a43b0f": { "balance": "1000000000000000000000000000000" } , + "0x5cdb7392efdce502ccc6fba5c3c1dd1653967b4d": { "balance": "1000000000000000000000000000000" } , + "0x3760dc9594ccac0f33ade5cc5371402131696341": { "balance": "1000000000000000000000000000000" } , + "0xa8c813ee806b4c8537ff5f16084d44db18ea9ab1": { "balance": "1000000000000000000000000000000" } , + "0x98e50c97baf98dc6a81bdb95067339a269a36fc1": { "balance": "1000000000000000000000000000000" } , + "0xfa723938fa8da1a8a2114ad409a11581761ee40d": { "balance": "1000000000000000000000000000000" } , + "0xfaa1038074941571524934ba52d312e88b3577f5": { "balance": "1000000000000000000000000000000" } , + "0x6c0ef9084a57df13c175afea32ea47a510c5506e": { "balance": "1000000000000000000000000000000" } , + "0x8a920edc1021ce76c22774e0e83723a6e51c2439": { "balance": "1000000000000000000000000000000" } , + "0xa7c0789bdeee38c6b59111a789dfb6b815489847": { "balance": "1000000000000000000000000000000" } , + "0xfee314cdc84ecfaa675e41b3559c0101e1eba6b8": { "balance": "1000000000000000000000000000000" } , + "0x69bfcdcb98c9562e0a2faee3ecdfd65e8a0adb19": { "balance": "1000000000000000000000000000000" } , + "0x4e9b85904bca60aeb5b916ca86ac622096908427": { "balance": "1000000000000000000000000000000" } , + "0x2bee474be207bdbeac83d6672da5ed2fd417eac9": { "balance": "1000000000000000000000000000000" } , + "0x0966454f51166c68b73b2865473c8fb2fcdefdd5": { "balance": "1000000000000000000000000000000" } , + "0x4bf989fa6572af36b190032505506f1db888357f": { "balance": "1000000000000000000000000000000" } , + "0xb28c45b98ae43a5e9ee5509c97ea037b5de5d6d9": { "balance": "1000000000000000000000000000000" } , + "0xbee0e5c1961d51be9bd670876caa9c90ba7d9016": { "balance": "1000000000000000000000000000000" } , + "0xaf97a8318a1a51d5daeeb9650024b63ee44f45bd": { "balance": "1000000000000000000000000000000" } , + "0xe3da7c014286258944ab20a31e4d861b4c9262f1": { "balance": "1000000000000000000000000000000" } , + "0x50120c17d7b59200e9b76e89e4e3de2f0cd00090": { "balance": "1000000000000000000000000000000" } , + "0x1a66fc89809112c20aa76a993db712fa9e003e4e": { "balance": "1000000000000000000000000000000" } , + "0xb942414cae2a1ab1056657b905845c0ab6b6280a": { "balance": "1000000000000000000000000000000" } , + "0x236bf02dfafaf03851a4e6f5d69052f4884cec32": { "balance": "1000000000000000000000000000000" } , + "0xc8e4d709eb3eb335dc69c9fbf2d24d447cb86105": { "balance": "1000000000000000000000000000000" } , + "0xf184c8c243a178c1748a0af45caedeca476105b4": { "balance": "1000000000000000000000000000000" } , + "0x97b921ba45e0aa8830701aa62050a83ee00a1bb8": { "balance": "1000000000000000000000000000000" } , + "0x29d83322219fdfb821459d5fdf796360faf3166a": { "balance": "1000000000000000000000000000000" } , + "0x3a921471a2397644c37c88ef9572c421ab37145d": { "balance": "1000000000000000000000000000000" } , + "0x426ec5f07847674aada3856609d8baaa16805d88": { "balance": "1000000000000000000000000000000" } , + "0x60268f799d8f1808e4a32c2eb898e73a8881f6f0": { "balance": "1000000000000000000000000000000" } , + "0x68bca79ae7aae796027ff843d2303444da5cf5d8": { "balance": "1000000000000000000000000000000" } , + "0xd1b6c947fb14060b38945584714491592e84875d": { "balance": "1000000000000000000000000000000" } , + "0x90431f3f75b26657f74abbb5c759b12e78f916cc": { "balance": "1000000000000000000000000000000" } , + "0xc2d3852f3292acb81bd164dbae5f1e2a87535150": { "balance": "1000000000000000000000000000000" } , + "0x9f62f4215cd277ca40dede101b4ccb29290de6bb": { "balance": "1000000000000000000000000000000" } , + "0xc98af661e44c5bf31d2f8bdff4bbf2808ed4e991": { "balance": "1000000000000000000000000000000" } , + "0x1feaf1671c1f0faf0d44c152f72dc755db932569": { "balance": "1000000000000000000000000000000" } , + "0x8945e48bd056f45c8b57f9025d2674bb03a24035": { "balance": "1000000000000000000000000000000" } , + "0x2f971bd38806c3ca45ae0a125d1267118bf5619c": { "balance": "1000000000000000000000000000000" } , + "0xac5df92da5171ba24a9618018b4f79494040334b": { "balance": "1000000000000000000000000000000" } , + "0x0150b461b06922a5030784ba888962c28bb1f188": { "balance": "1000000000000000000000000000000" } , + "0xde14aca36acc62c305a7ee571da37840a408e600": { "balance": "1000000000000000000000000000000" } , + "0x66cd465ddcd85504c0d2cfb1728acee994d55a3f": { "balance": "1000000000000000000000000000000" } , + "0x5d9326c6504833d84f8a0d65ded59b1a6e768ca2": { "balance": "1000000000000000000000000000000" } , + "0x8fe24dbbf9884bd458d8cfac528b4ad70e82497d": { "balance": "1000000000000000000000000000000" } , + "0xfe2c5aa110fff89361806ea7ee080bfffba0d3dd": { "balance": "1000000000000000000000000000000" } , + "0xd5b561a27cca5049650a14ab93dbf1a20c0cefc1": { "balance": "1000000000000000000000000000000" } , + "0x1239fe658b410dbbac5bbd572035f5041542f9e5": { "balance": "1000000000000000000000000000000" } , + "0x26d88f6a8b659be4165ee53774a057e41b5201c9": { "balance": "1000000000000000000000000000000" } , + "0xa3597b1162b6559cb5e966904b63e762ece756a4": { "balance": "1000000000000000000000000000000" } , + "0x137048b9fa4f1234d6519271b2c5ec64f480db0f": { "balance": "1000000000000000000000000000000" } , + "0xc58744e2eceefd45cc5469f0e0a708ad24ddbbdb": { "balance": "1000000000000000000000000000000" } , + "0x83c1479d2a32d9ed9fa699289b6c2db56b7cd045": { "balance": "1000000000000000000000000000000" } , + "0x0fbbe17a0e5a61ee3e8661f442d7f6b177c49820": { "balance": "1000000000000000000000000000000" } , + "0x96672f9e982936e1904b15c948cc81bf18027db6": { "balance": "1000000000000000000000000000000" } , + "0xf1a5912ff318aebf312cdb54c75642a9e632703c": { "balance": "1000000000000000000000000000000" } , + "0x62712ceccb50f62ca4c5402fff6da9c819c866cf": { "balance": "1000000000000000000000000000000" } , + "0x6093f0f2a7b5148b71603ac439adbc4c0e5aa5da": { "balance": "1000000000000000000000000000000" } , + "0xc3820490201e94d76b44655d2df713fec29d9795": { "balance": "1000000000000000000000000000000" } , + "0x6d0d7f0ff51917bd84a5f7270d31a894282aaf4b": { "balance": "1000000000000000000000000000000" } , + "0x1f1d6041e12a18cf1202019f146f2fc150915e8d": { "balance": "1000000000000000000000000000000" } , + "0x6fec280c0ab320715b17d70e8b02c2d4141c1372": { "balance": "1000000000000000000000000000000" } , + "0x4cf9b195f7cb5f86694d9b399fe21a5f34616fd3": { "balance": "1000000000000000000000000000000" } , + "0xfe275c9b5ac792327da509b27eb9614196dfb07d": { "balance": "1000000000000000000000000000000" } , + "0x6a37ad7dceec4595eea9f03b82d2710e738343ac": { "balance": "1000000000000000000000000000000" } , + "0x6d8092cb926daf29236f866cd31c327ff73323d1": { "balance": "1000000000000000000000000000000" } , + "0xa1cd651d99283be60e2a9d2e3bc8a90aedb8244f": { "balance": "1000000000000000000000000000000" } , + "0x5667601b7dcde6f24d06bccc4f291cb06976f4ee": { "balance": "1000000000000000000000000000000" } , + "0x6314956b78bb2eaed1c49b3ae71d4d0ec501cfab": { "balance": "1000000000000000000000000000000" } , + "0x157d38b52196b248e9fe6a2172e32ce2b8c078e6": { "balance": "1000000000000000000000000000000" } , + "0xfa7a8c69810eaf16a395d2a93b3ab51efeed2a1c": { "balance": "1000000000000000000000000000000" } , + "0x765708943c3b791563d1e3f0533b6d7e7d769e4d": { "balance": "1000000000000000000000000000000" } , + "0xf2197b153b4c9086fc5410431fbf7960d284c65e": { "balance": "1000000000000000000000000000000" } , + "0xfe14077c26a507496b7208384d459e21c49c4212": { "balance": "1000000000000000000000000000000" } , + "0xfe3d4f1fc038f4f756ba44995129cd45c9e0e861": { "balance": "1000000000000000000000000000000" } , + "0x099452fedc71897880f584b1bc1706efc4e76e36": { "balance": "1000000000000000000000000000000" } , + "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6": { "balance": "1000000000000000000000000000000000000000000000000000000000" } , + "0000000000000000000000000000000000000001": { "precompiled": { "name": "ecrecover", "linear": { "base": 3000, "word": 0 } } }, + "0000000000000000000000000000000000000002": { "precompiled": { "name": "sha256", "linear": { "base": 60, "word": 12 } } }, + "0000000000000000000000000000000000000003": { "precompiled": { "name": "ripemd160", "linear": { "base": 600, "word": 120 } } }, + "0000000000000000000000000000000000000004": { "precompiled": { "name": "identity", "linear": { "base": 15, "word": 3 } } }, + "0000000000000000000000000000000000000005": { "precompiled": { "name": "modexp", "startingBlock" : "0x2dc6c0" } }, + "0000000000000000000000000000000000000006": { "precompiled": { "name": "alt_bn128_G1_add", "startingBlock" : "0x2dc6c0", "linear": { "base": 500, "word": 0 } } }, + "0000000000000000000000000000000000000007": { "precompiled": { "name": "alt_bn128_G1_mul", "startingBlock" : "0x2dc6c0", "linear": { "base": 40000, "word": 0 } } }, + "0000000000000000000000000000000000000008": { "precompiled": { "name": "alt_bn128_pairing_product", "startingBlock" : "0x2dc6c0" } }, + "000000000000000000000000000000000000000A": { "precompiled": { "name": "readChunk", "linear": { "base": 15, "word": 0 },"startingBlock" : "0x0"} }, + "000000000000000000000000000000000000000B": { "precompiled": { "name": "createFile", "linear": { "base": 15, "word": 0 },"startingBlock" : "0x0", "restrictAccess": ["69362535ec535F0643cBf62D16aDeDCAf32Ee6F7"] } }, + "000000000000000000000000000000000000000C": { "precompiled": { "name": "uploadChunk", "linear": { "base": 15, "word": 0 },"startingBlock" : "0x0"} }, + "000000000000000000000000000000000000000D": { "precompiled": { "name": "getFileSize", "linear": { "base": 15, "word": 0 },"startingBlock" : "0x0"} }, + "000000000000000000000000000000000000000E": { "precompiled": { "name": "deleteFile", "linear": { "base": 15, "word": 0 },"startingBlock" : "0x0"} }, + "000000000000000000000000000000000000000F": { "precompiled": { "name": "createDirectory", "linear": { "base": 15, "word": 0 },"startingBlock" : "0x0"} }, + "0000000000000000000000000000000000000010": { "precompiled": { "name": "deleteDirectory", "linear": { "base": 15, "word": 0 },"startingBlock" : "0x0"} }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F8": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e0d565b61025b565b005b6100ef60048036036100ea9190810190613e0d565b610804565b6040516100fc9190614ab1565b60405180910390f35b61011f600480360361011a9190810190613e0d565b610b43565b005b61013b60048036036101369190810190613dd1565b610f72565b005b610145611190565b6040516101529190614e2c565b60405180910390f35b61017560048036036101709190810190613ea2565b611199565b005b610191600480360361018c9190810190613f21565b6113f9565b60405161019e9190614a72565b60405180910390f35b6101c160048036036101bc9190810190613e0d565b6116f9565b005b6101dd60048036036101d89190810190613e0d565b61189e565b6040516101ea9190614a8f565b60405180910390f35b61020d60048036036102089190810190613e4e565b611b9d565b005b61022960048036036102249190810190613e0d565b61213a565b005b61024560048036036102409190810190613e0d565b612790565b6040516102529190614e2c565b60405180910390f35b6000339050606061026b83612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614a1a565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614c2c565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614a1a565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614a31565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614c2c565b60405180910390fd5b600082600201826040516104209190614a31565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614cac565b60405180910390fd5b60006104818587612c10565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614bcc565b60405180910390fd5b6104cb613996565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614a31565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613a52565b5090505083600101836040516107539190614a31565b9081526020016040518091039020548460010182600001516040516107789190614a1a565b9081526020016040518091039020819055506000846001018460405161079e9190614a31565b908152602001604051809103902081905550836000018054809190600190036107c79190613af8565b5083600201836040516107da9190614a31565b9081526020016040518091039020600080820160006107f99190613b2a565b505050505050505050565b600080606061081284612c74565b91509150606061082182612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a09190614a1a565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb9190614a1a565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b9050600082600101826040516109479190614a31565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613996565b826000016001846001018460405161098a9190614a31565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614c2c565b60405180910390fd5b60003390506060610bd983612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c589190614a1a565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614c2c565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf9190614a1a565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614d4c565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d769190614a31565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614d8c565b60405180910390fd5b610dce81612ff6565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614c4c565b60405180910390fd5b6000610e1985876130d7565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290614aec565b60405180910390fd5b610e63613996565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613a52565b5050505083600001805490508460010184604051610f579190614a31565b90815260200160405180910390208190555050505050505050565b610f7a61313b565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614bac565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614c8c565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614b0c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866131d4565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614d6c565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614acc565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b6c565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614b4c565b60405180910390fd5b600061136a838787876133d3565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614c6c565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613b4e565b6000606061140e86612c74565b9150915061141a613996565b61142483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614e0c565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614b6c565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614acc565b60405180910390fd5b60006116a684848989613484565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614cec565b60405180910390fd5b505050509392505050565b6000339050600061170a82846131d4565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614d6c565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614ccc565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613517565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614b2c565b60405180910390fd5b505050505050565b6060600060606118ad84612c74565b9150915060606118bc82612a10565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b60200260200101516040516119379190614a1a565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614c2c565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab9190614a1a565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614d2c565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614dac565b60405180910390fd5b6060611cf984612a10565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e0a57600082600101846001840381518110611d6357fe5b6020026020010151604051611d789190614a1a565b90815260200160405180910390205411611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614c2c565b60405180910390fd5b81600201836001830381518110611dda57fe5b6020026020010151604051611def9190614a1a565b90815260200160405180910390209150806001019050611d45565b50600254816000018054905010611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614d4c565b60405180910390fd5b60606001835111611e675785611e80565b82600184510381518110611e7757fe5b60200260200101515b905060008260010182604051611e969190614a31565b90815260200160405180910390205414611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614d8c565b60405180910390fd5b611eee81612ff6565b611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614d0c565b60405180910390fd5b6000611f3a85888861357b565b905080611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614dec565b60405180910390fd5b6060600354600160035489010381611f9057fe5b04604051908082528060200260200182016040528015611fbf5781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ff357fe5b8152602001838152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906120439291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561209257fe5b021790555060808201518160040190805190602001906120b3929190613a52565b50505050836000018054905084600101846040516120d19190614a31565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612147613996565b61215182846131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f55780601f106121ca576101008083540402835291602001916121f5565b820191906000526020600020905b8154815290600101906020018083116121d857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561224157fe5b600281111561224c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156122c457602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161228e5790505b5050505050815250509050600060028111156122dc57fe5b816060015160028111156122ec57fe5b141561232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614b8c565b60405180910390fd5b600061233983856135e8565b90508061237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290614bec565b60405180910390fd5b606061238685612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561241e57816002018360018303815181106123ee57fe5b60200260200101516040516124039190614a1a565b908152602001604051809103902091508060010190506123d2565b50600060018260010186600001516040516124399190614a1a565b908152602001604051809103902054039050612453613996565b8260000160018460000180549050038154811061246c57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561251e5780601f106124f35761010080835404028352916020019161251e565b820191906000526020600020905b81548152906001019060200180831161250157829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561256a57fe5b600281111561257557fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156125ed57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116125b75790505b50505050508152505090508083600001838154811061260857fe5b906000526020600020906005020160008201518160000190805190602001906126329291906139d2565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561268157fe5b021790555060808201518160040190805190602001906126a2929190613a52565b50905050826000018054809190600190036126bd9190613af8565b508260010186600001516040516126d49190614a1a565b9081526020016040518091039020548360010182600001516040516126f99190614a1a565b90815260200160405180910390208190555060008360010187600001516040516127239190614a1a565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061279e84612c74565b915091506127aa613996565b6127b483836131d4565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128585780601f1061282d57610100808354040283529160200191612858565b820191906000526020600020905b81548152906001019060200180831161283b57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156128a457fe5b60028111156128af57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561292757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116128f15790505b50505050508152505090506001600281111561293f57fe5b8160600151600281111561294f57fe5b1480612974575060028081111561296257fe5b8160600151600281111561297257fe5b145b6129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90614d6c565b60405180910390fd5b60006129bf848461364c565b809650819250505080612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614dcc565b60405180910390fd5b50505050919050565b6060612a1a613b73565b612a23836136b5565b9050612a2d613b73565b612a6b6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506136b5565b905060606001612a8483856136e390919063ffffffff16565b01604051908082528060200260200182016040528015612ab857816020015b6060815260200190600190039081612aa35790505b50905060008090505b8151811015612b0957612ae5612ae0848661375890919063ffffffff16565b613772565b828281518110612af157fe5b60200260200101819052508080600101915050612ac1565b50600081600183510381518110612b1c57fe5b6020026020010151511415612b875780600182510381518110612b3b57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612b7f57816020015b6060815260200190600190039081612b6a5790505b509350612bc0565b8051604051908082528060200260200182016040528015612bbc57816020015b6060815260200190600190039081612ba75790505b5093505b60008090505b8451811015612c0757818181518110612bdb57fe5b6020026020010151858281518110612bef57fe5b60200260200101819052508080600101915050612bc6565b50505050919050565b60008060016020601f85510181612c2357fe5b040190506040518481526020810160005b83811015612c55578060200286015181602002830152806001019050612c34565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb890614c0c565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612cf65781602001600182028038833980820191505090505b50905060008090505b82811015612d6657858181518110612d1357fe5b602001015160f81c60f81b828281518110612d2a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612cff565b50600080905060008090505b83811015612e95576000838281518110612d8857fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612dad575060398111155b80612dc6575060418110158015612dc55750605a8111155b5b80612ddf575060618110158015612dde575060668111155b5b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1590614c0c565b60405180910390fd5b60308110158015612e30575060398111155b15612e415760308103601084020192505b60418110158015612e535750605a8111155b15612e645760378103601084020192505b60618110158015612e76575060668111155b15612e875760578103601084020192505b508080600101915050612d72565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612ec657fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614c0c565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612f715781602001600182028038833980820191505090505b50945060008090505b81811015612fec5760008860018784010181518110612f9557fe5b602001015160f81c60f81b905080878381518110612faf57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612f7a565b5050505050915091565b600060405160200161300790614a5d565b604051602081830303815290604052805190602001208260405160200161302e9190614a31565b604051602081830303815290604052805190602001201480613099575060405160200161305a90614a48565b60405160208183030381529060405280519060200120826040516020016130819190614a31565b60405160208183030381529060405280519060200120145b806130a5575060008251145b156130b357600090506130d2565b60008251905060ff8111156130cc5760009150506130d2565b60019150505b919050565b60008060016020601f855101816130ea57fe5b040190506040518481526020810160005b8381101561311c5780602002860151816020028301528060010190506130fb565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561319757600080fd5b505afa1580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506131cf9190810190613da8565b905090565b600060606131e183612a10565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156132f25760008260010184600184038151811061324b57fe5b60200260200101516040516132609190614a1a565b908152602001604051809103902054116132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614c2c565b60405180910390fd5b816002018360018303815181106132c257fe5b60200260200101516040516132d79190614a1a565b9081526020016040518091039020915080600101905061322d565b5060606001835111613304578461331d565b8260018451038151811061331457fe5b60200260200101515b9050600082600101826040516133339190614a31565b90815260200160405180910390205411613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614c2c565b60405180910390fd5b6000826000016001846001018460405161339c9190614a31565b90815260200160405180910390205403815481106133b657fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816133e657fe5b04019050600060016020601f885101816133fc57fe5b040190506040518781526020810160005b8381101561342e57806020028901518160200283015280600101905061340d565b50868360200282015260005b84811015613460578060200287015181856001010160200283015280600101905061343a565b50602082848601602002606001846000600c600019f1945050505050949350505050565b600061348e613b4e565b600060016020601f885101816134a057fe5b0401905060006020601f8601816134b357fe5b0490506040518881526020810160005b848110156134e457806020028a0151816020028301528060010190506134c3565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161352a57fe5b040190506040518481526020810160005b8381101561355c57806020028601518160200283015280600101905061353b565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161358e57fe5b040190506040518581526020810160005b838110156135c057806020028701518160200283015280600101905061359f565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816135fb57fe5b040190506040518481526020810160005b8381101561362d57806020028601518160200283015280600101905061360c565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161366157fe5b040190506040518581526020810160005b83811015613693578060200287015181602002830152806001019050613672565b506020826020850260200184600d600019fa9450815193505050509250929050565b6136bd613b73565b600060208301905060405180604001604052808451815260200182815250915050919050565b600080826000015161370785600001518660200151866000015187602001516137d4565b0190505b8360000151846020015101811161375157818060010192505082600001516137498560200151830386600001510383866000015187602001516137d4565b01905061370b565b5092915050565b613760613b73565b61376b8383836138af565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156137ac5781602001600182028038833980820191505090505b50905060006020820190506137ca818560200151866000015161394d565b8192505050919050565b600080849050600086851161389f576020851161385957600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461384b57818610613838578a8a0196505050505050506138a7565b858060010196505083865116905061381a565b8596505050505050506138a7565b60008585209050600091505b858803821161389d57600086842090508082141561388957839450505050506138a7565b600184019350508180600101925050613865565b505b868601925050505b949350505050565b6138b7613b73565b60006138d585600001518660200151866000015187602001516137d4565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613917576000856000018181525050613942565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613971578151835260208301925060208201915060208103905061394e565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156139c557fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a1357805160ff1916838001178555613a41565b82800160010185558215613a41579182015b82811115613a40578251825591602001919060010190613a25565b5b509050613a4e9190613b8d565b5090565b82805482825590600052602060002090601f01602090048101928215613ae75791602002820160005b83821115613ab857835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613a7b565b8015613ae55782816101000a81549060ff0219169055600101602081600001049283019260010302613ab8565b505b509050613af49190613bb2565b5090565b815481835581811115613b2557600502816005028360005260206000209182019101613b249190613be2565b5b505050565b5080546000825560050290600052602060002090810190613b4b9190613be2565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613baf91905b80821115613bab576000816000905550600101613b93565b5090565b90565b613bdf91905b80821115613bdb57600081816101000a81549060ff021916905550600101613bb8565b5090565b90565b613c4e91905b80821115613c4a5760008082016000613c019190613c51565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613c419190613c99565b50600501613be8565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613c775750613c96565b601f016020900490600052602060002090810190613c959190613b8d565b5b50565b50805460008255601f016020900490600052602060002090810190613cbe9190613b8d565b50565b600081359050613cd081615086565b92915050565b600081519050613ce581615086565b92915050565b600082601f830112613cfc57600080fd5b8135613d0f613d0a82614e74565b614e47565b91508082526020830160208301858383011115613d2b57600080fd5b613d36838284615026565b50505092915050565b600082601f830112613d5057600080fd5b8135613d63613d5e82614ea0565b614e47565b91508082526020830160208301858383011115613d7f57600080fd5b613d8a838284615026565b50505092915050565b600081359050613da28161509d565b92915050565b600060208284031215613dba57600080fd5b6000613dc884828501613cd6565b91505092915050565b60008060408385031215613de457600080fd5b6000613df285828601613cc1565b9250506020613e0385828601613d93565b9150509250929050565b600060208284031215613e1f57600080fd5b600082013567ffffffffffffffff811115613e3957600080fd5b613e4584828501613d3f565b91505092915050565b60008060408385031215613e6157600080fd5b600083013567ffffffffffffffff811115613e7b57600080fd5b613e8785828601613d3f565b9250506020613e9885828601613d93565b9150509250929050565b600080600060608486031215613eb757600080fd5b600084013567ffffffffffffffff811115613ed157600080fd5b613edd86828701613d3f565b9350506020613eee86828701613d93565b925050604084013567ffffffffffffffff811115613f0b57600080fd5b613f1786828701613ceb565b9150509250925092565b600080600060608486031215613f3657600080fd5b600084013567ffffffffffffffff811115613f5057600080fd5b613f5c86828701613d3f565b9350506020613f6d86828701613d93565b9250506040613f7e86828701613d93565b9150509250925092565b6000613f9483836140f6565b60208301905092915050565b6000613fac8383614105565b60208301905092915050565b6000613fc4838361497f565b905092915050565b6000613fd782614ef6565b613fe18185614f55565b9350613fec83614ecc565b8060005b8381101561401d5781516140048882613f88565b975061400f83614f2e565b925050600181019050613ff0565b5085935050505092915050565b61403381614f01565b61403d8184614f66565b925061404882614edc565b8060005b838110156140795781516140608782613fa0565b965061406b83614f3b565b92505060018101905061404c565b505050505050565b600061408c82614f0d565b6140968185614f71565b9350836020820285016140a885614ee6565b8060005b858110156140e457848403895281516140c58582613fb8565b94506140d083614f48565b925060208a019950506001810190506140ac565b50829750879550505050505092915050565b6140ff81614fc1565b82525050565b61410e81614fcd565b82525050565b61411d81615014565b82525050565b61412c81615014565b82525050565b600061413d82614f23565b6141478185614fa4565b9350614157818560208601615035565b80840191505092915050565b600061416e82614f18565b6141788185614f82565b9350614188818560208601615035565b61419181615068565b840191505092915050565b60006141a782614f18565b6141b18185614fa4565b93506141c1818560208601615035565b80840191505092915050565b60006141da601883614f93565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061421a601583614f93565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061425a602483614f93565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c0601b83614f93565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b6000614300601983614f93565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614340601683614f93565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614380600f83614f93565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006143c0600e83614f93565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b6000614400601883614f93565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614440601083614f93565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614480601383614f93565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006144c0600c83614f93565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b6000614500600183614fa4565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614540601683614f93565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614580601583614f93565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006145c0602683614f93565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614626601683614f93565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614666602383614f93565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cc601183614f93565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061470c601883614f93565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061474c601f83614f93565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061478c600283614fa4565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006147cc601183614f93565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b600061480c600e83614f93565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061484c601883614f93565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061488c601983614f93565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b60006148cc601883614f93565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061490c601083614f93565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b600061494c601983614f93565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261499c8282614163565b91505060208301516149b160208601826140f6565b5060408301516149c460408601826149fc565b5060608301516149d76060860182614114565b50608083015184820360808601526149ef8282613fcc565b9150508091505092915050565b614a058161500a565b82525050565b614a148161500a565b82525050565b6000614a26828461419c565b915081905092915050565b6000614a3d8284614132565b915081905092915050565b6000614a53826144f3565b9150819050919050565b6000614a688261477f565b9150819050919050565b60006210000082019050614a89600083018461402a565b92915050565b60006020820190508181036000830152614aa98184614081565b905092915050565b6000602082019050614ac66000830184614123565b92915050565b60006020820190508181036000830152614ae5816141cd565b9050919050565b60006020820190508181036000830152614b058161420d565b9050919050565b60006020820190508181036000830152614b258161424d565b9050919050565b60006020820190508181036000830152614b45816142b3565b9050919050565b60006020820190508181036000830152614b65816142f3565b9050919050565b60006020820190508181036000830152614b8581614333565b9050919050565b60006020820190508181036000830152614ba581614373565b9050919050565b60006020820190508181036000830152614bc5816143b3565b9050919050565b60006020820190508181036000830152614be5816143f3565b9050919050565b60006020820190508181036000830152614c0581614433565b9050919050565b60006020820190508181036000830152614c2581614473565b9050919050565b60006020820190508181036000830152614c45816144b3565b9050919050565b60006020820190508181036000830152614c6581614533565b9050919050565b60006020820190508181036000830152614c8581614573565b9050919050565b60006020820190508181036000830152614ca5816145b3565b9050919050565b60006020820190508181036000830152614cc581614619565b9050919050565b60006020820190508181036000830152614ce581614659565b9050919050565b60006020820190508181036000830152614d05816146bf565b9050919050565b60006020820190508181036000830152614d25816146ff565b9050919050565b60006020820190508181036000830152614d458161473f565b9050919050565b60006020820190508181036000830152614d65816147bf565b9050919050565b60006020820190508181036000830152614d85816147ff565b9050919050565b60006020820190508181036000830152614da58161483f565b9050919050565b60006020820190508181036000830152614dc58161487f565b9050919050565b60006020820190508181036000830152614de5816148bf565b9050919050565b60006020820190508181036000830152614e05816148ff565b9050919050565b60006020820190508181036000830152614e258161493f565b9050919050565b6000602082019050614e416000830184614a0b565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614e6a57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e8b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614eb757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fba82614fea565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614fe582615079565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061501f82614fd7565b9050919050565b82818337600083830152505050565b60005b83811015615053578082015181840152602081019050615038565b83811115615062576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061508357fe5b50565b61508f81614faf565b811461509a57600080fd5b50565b6150a68161500a565b81146150b157600080fd5b5056fea365627a7a72315820314a90e541327f2678eaf7815f54348c3702e4fa45cdf1d5595b378d08af86896c6578706572696d656e74616cf564736f6c634300050d0040", + "storage": { + "0x0": "2868903936" + }, + "nonce": "0" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "storage": { + "0x0": "2868903936" + }, + "nonce": "0" + }, + "0x69362535ec535F0643cBf62D16aDeDCAf32Ee6F7": { + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613cff565b61025b565b005b6100ef60048036036100ea9190810190613cff565b610804565b6040516100fc9190614963565b60405180910390f35b61011f600480360361011a9190810190613cff565b610b43565b005b61013b60048036036101369190810190613cc3565b610f72565b005b610145611190565b6040516101529190614cbe565b60405180910390f35b61017560048036036101709190810190613d94565b611199565b005b610191600480360361018c9190810190613e13565b6113f9565b60405161019e9190614924565b60405180910390f35b6101c160048036036101bc9190810190613cff565b6116f9565b005b6101dd60048036036101d89190810190613cff565b61189e565b6040516101ea9190614941565b60405180910390f35b61020d60048036036102089190810190613d40565b611b9d565b005b61022960048036036102249190810190613cff565b61202c565b005b61024560048036036102409190810190613cff565b612682565b6040516102529190614cbe565b60405180910390f35b6000339050606061026b83612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea91906148cc565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614ade565b60405180910390fd5b8160020183600183038151811061034c57fe5b602002602001015160405161036191906148cc565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd91906148e3565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614ade565b60405180910390fd5b6000826002018260405161042091906148e3565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614b5e565b60405180910390fd5b60006104818587612b02565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614a7e565b60405180910390fd5b6104cb613888565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b505050505081525050905080846000016001866001018660405161068991906148e3565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd9291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613944565b50905050836001018360405161075391906148e3565b90815260200160405180910390205484600101826000015160405161077891906148cc565b9081526020016040518091039020819055506000846001018460405161079e91906148e3565b908152602001604051809103902081905550836000018054809190600190036107c791906139ea565b5083600201836040516107da91906148e3565b9081526020016040518091039020600080820160006107f99190613a1c565b505050505050505050565b600080606061081284612b66565b91509150606061082182612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156109065760008260010184600184038151811061088b57fe5b60200260200101516040516108a091906148cc565b90815260200160405180910390205414156108c357600095505050505050610b3e565b816002018360018303815181106108d657fe5b60200260200101516040516108eb91906148cc565b9081526020016040518091039020915080600101905061086d565b50606060018351116109185783610931565b8260018451038151811061092857fe5b60200260200101515b90506000826001018260405161094791906148e3565b908152602001604051809103902054141561096a57600095505050505050610b3e565b610972613888565b826000016001846001018460405161098a91906148e3565b90815260200160405180910390205403815481106109a457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610aa257fe5b6002811115610aad57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b2557602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610aef5790505b5050505050815250509050806060015196505050505050505b919050565b600160009054906101000a900460ff16610b85576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b6000815111610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090614ade565b60405180910390fd5b60003390506060610bd983612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610cea57600082600101846001840381518110610c4357fe5b6020026020010151604051610c5891906148cc565b90815260200160405180910390205411610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90614ade565b60405180910390fd5b81600201836001830381518110610cba57fe5b6020026020010151604051610ccf91906148cc565b90815260200160405180910390209150806001019050610c25565b50600254816000018054905010610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90614bfe565b60405180910390fd5b60606001835111610d475784610d60565b82600184510381518110610d5757fe5b60200260200101515b905060008260010182604051610d7691906148e3565b90815260200160405180910390205414610dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbc90614c3e565b60405180910390fd5b610dce81612ee8565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490614afe565b60405180910390fd5b6000610e198587612fc9565b905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e529061499e565b60405180910390fd5b610e63613888565b82816000018190525060008160200190151590811515815250508360000181908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190610ec99291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f1857fe5b02179055506080820151816004019080519060200190610f39929190613944565b5050505083600001805490508460010184604051610f5791906148e3565b90815260200160405180910390208190555050505050505050565b610f7a61302d565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480610fdf57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101590614a5e565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614b3e565b60405180910390fd5b600054600754820111156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e0906149be565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460076000828254039250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806007600082825401925050819055505050565b60008054905090565b600033905060006111aa82866130c6565b9050600160028111156111b957fe5b8160030160009054906101000a900460ff1660028111156111d657fe5b14611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614c1e565b60405180910390fd5b6000600354858161122357fe5b061480156112345750806002015484105b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061497e565b60405180910390fd5b600354848260020154031080156112905750838160020154038351145b8061129d57506003548351145b6112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614a1e565b60405180910390fd5b600015158160040160035486816112ef57fe5b04815481106112fa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1615151461135c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611353906149fe565b60405180910390fd5b600061136a838787876132c5565b9050806113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614b1e565b60405180910390fd5b60018260040160035487816113bd57fe5b04815481106113c857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b611401613a40565b6000606061140e86612b66565b9150915061141a613888565b61142483836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114c85780601f1061149d576101008083540402835291602001916114c8565b820191906000526020600020905b8154815290600101906020018083116114ab57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561151457fe5b600281111561151f57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561159757602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115615790505b50505050508152505090506002808111156115ae57fe5b816060015160028111156115be57fe5b146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614c9e565b60405180910390fd5b60035485111580156116105750600085115b61164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690614a1e565b60405180910390fd5b80604001518587011115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061497e565b60405180910390fd5b60006116a684848989613376565b8096508192505050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614b9e565b60405180910390fd5b505050509392505050565b6000339050600061170a82846130c6565b90506001600281111561171957fe5b8160030160009054906101000a900460ff16600281111561173657fe5b14611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614c1e565b60405180910390fd5b60006001905060008260040180549050905060008090505b818110156117e157600015158460040182815481106117a957fe5b90600052602060002090602091828204019190069054906101000a900460ff16151514156117d657600092505b80600101905061178e565b5081611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990614b7e565b60405180910390fd5b60028360030160006101000a81548160ff0219169083600281111561184357fe5b021790555060006118548587613409565b905080611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d906149de565b60405180910390fd5b505050505050565b6060600060606118ad84612b66565b9150915060606118bc82612902565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b82518110156119c65760008260010184838151811061192257fe5b602002602001015160405161193791906148cc565b90815260200160405180910390205411611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90614ade565b60405180910390fd5b8160020183828151811061199657fe5b60200260200101516040516119ab91906148cc565b90815260200160405180910390209150806001019050611907565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611b8e57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aa75780601f10611a7c57610100808354040283529160200191611aa7565b820191906000526020600020905b815481529060010190602001808311611a8a57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611af357fe5b6002811115611afe57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611b7657602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b405790505b505050505081525050815260200190600101906119eb565b50505050945050505050919050565b600160009054906101000a900460ff16611bdf576120006002819055506210000060038190555060018060006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290614bde565b60405180910390fd5b6060611c3684612902565b90506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611d4757600082600101846001840381518110611ca057fe5b6020026020010151604051611cb591906148cc565b90815260200160405180910390205411611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90614ade565b60405180910390fd5b81600201836001830381518110611d1757fe5b6020026020010151604051611d2c91906148cc565b90815260200160405180910390209150806001019050611c82565b5060606001835111611d595785611d72565b82600184510381518110611d6957fe5b60200260200101515b905060008260010182604051611d8891906148e3565b90815260200160405180910390205414611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614c3e565b60405180910390fd5b611de081612ee8565b611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614bbe565b60405180910390fd5b6000611e2c85888861346d565b905080611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590614c7e565b60405180910390fd5b6060600354600160035489010381611e8257fe5b04604051908082528060200260200182016040528015611eb15781602001602082028038833980820191505090505b509050836000016040518060a0016040528085815260200160011515815260200189815260200160016002811115611ee557fe5b815260200183815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000019080519060200190611f359291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115611f8457fe5b02179055506080820151816004019080519060200190611fa5929190613944565b5050505083600001805490508460010184604051611fc391906148e3565b90815260200160405180910390208190555086600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b6000339050612039613888565b61204382846130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e75780601f106120bc576101008083540402835291602001916120e7565b820191906000526020600020905b8154815290600101906020018083116120ca57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561213357fe5b600281111561213e57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b657602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116121805790505b5050505050815250509050600060028111156121ce57fe5b816060015160028111156121de57fe5b141561221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614a3e565b60405180910390fd5b600061222b83856134da565b90508061226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614a9e565b60405180910390fd5b606061227885612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561231057816002018360018303815181106122e057fe5b60200260200101516040516122f591906148cc565b908152602001604051809103902091508060010190506122c4565b506000600182600101866000015160405161232b91906148cc565b908152602001604051809103902054039050612345613888565b8260000160018460000180549050038154811061235e57fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124105780601f106123e557610100808354040283529160200191612410565b820191906000526020600020905b8154815290600101906020018083116123f357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561245c57fe5b600281111561246757fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156124df57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116124a95790505b5050505050815250509050808360000183815481106124fa57fe5b906000526020600020906005020160008201518160000190805190602001906125249291906138c4565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561257357fe5b02179055506080820151816004019080519060200190612594929190613944565b50905050826000018054809190600190036125af91906139ea565b508260010186600001516040516125c691906148cc565b9081526020016040518091039020548360010182600001516040516125eb91906148cc565b908152602001604051809103902081905550600083600101876000015160405161261591906148cc565b9081526020016040518091039020819055508560400151600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061269084612b66565b9150915061269c613888565b6126a683836130c6565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561274a5780601f1061271f5761010080835404028352916020019161274a565b820191906000526020600020905b81548152906001019060200180831161272d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561279657fe5b60028111156127a157fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561281957602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116127e35790505b50505050508152505090506001600281111561283157fe5b8160600151600281111561284157fe5b1480612866575060028081111561285457fe5b8160600151600281111561286457fe5b145b6128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614c1e565b60405180910390fd5b60006128b1848461353e565b8096508192505050806128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614c5e565b60405180910390fd5b50505050919050565b606061290c613a65565b612915836135a7565b905061291f613a65565b61295d6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506135a7565b90506060600161297683856135d590919063ffffffff16565b016040519080825280602002602001820160405280156129aa57816020015b60608152602001906001900390816129955790505b50905060008090505b81518110156129fb576129d76129d2848661364a90919063ffffffff16565b613664565b8282815181106129e357fe5b602002602001018190525080806001019150506129b3565b50600081600183510381518110612a0e57fe5b6020026020010151511415612a795780600182510381518110612a2d57fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612a7157816020015b6060815260200190600190039081612a5c5790505b509350612ab2565b8051604051908082528060200260200182016040528015612aae57816020015b6060815260200190600190039081612a995790505b5093505b60008090505b8451811015612af957818181518110612acd57fe5b6020026020010151858281518110612ae157fe5b60200260200101819052508080600101915050612ab8565b50505050919050565b60008060016020601f85510181612b1557fe5b040190506040518481526020810160005b83811015612b47578060200286015181602002830152806001019050612b26565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614abe565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b50905060008090505b82811015612c5857858181518110612c0557fe5b602001015160f81c60f81b828281518110612c1c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612bf1565b50600080905060008090505b83811015612d87576000838281518110612c7a57fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612c9f575060398111155b80612cb8575060418110158015612cb75750605a8111155b5b80612cd1575060618110158015612cd0575060668111155b5b612d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0790614abe565b60405180910390fd5b60308110158015612d22575060398111155b15612d335760308103601084020192505b60418110158015612d455750605a8111155b15612d565760378103601084020192505b60618110158015612d68575060668111155b15612d795760578103601084020192505b508080600101915050612c64565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612db857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c90614abe565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f191660200182016040528015612e635781602001600182028038833980820191505090505b50945060008090505b81811015612ede5760008860018784010181518110612e8757fe5b602001015160f81c60f81b905080878381518110612ea157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050612e6c565b5050505050915091565b6000604051602001612ef99061490f565b6040516020818303038152906040528051906020012082604051602001612f2091906148e3565b604051602081830303815290604052805190602001201480612f8b5750604051602001612f4c906148fa565b6040516020818303038152906040528051906020012082604051602001612f7391906148e3565b60405160208183030381529060405280519060200120145b80612f97575060008251145b15612fa55760009050612fc4565b60008251905060ff811115612fbe576000915050612fc4565b60019150505b919050565b60008060016020601f85510181612fdc57fe5b040190506040518481526020810160005b8381101561300e578060200286015181602002830152806001019050612fed565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308957600080fd5b505afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130c19190810190613c9a565b905090565b600060606130d383612902565b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156131e45760008260010184600184038151811061313d57fe5b602002602001015160405161315291906148cc565b908152602001604051809103902054116131a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319890614ade565b60405180910390fd5b816002018360018303815181106131b457fe5b60200260200101516040516131c991906148cc565b9081526020016040518091039020915080600101905061311f565b50606060018351116131f6578461320f565b8260018451038151811061320657fe5b60200260200101515b90506000826001018260405161322591906148e3565b90815260200160405180910390205411613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614ade565b60405180910390fd5b6000826000016001846001018460405161328e91906148e3565b90815260200160405180910390205403815481106132a857fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f855101816132d857fe5b04019050600060016020601f885101816132ee57fe5b040190506040518781526020810160005b838110156133205780602002890151816020028301528060010190506132ff565b50868360200282015260005b84811015613352578060200287015181856001010160200283015280600101905061332c565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613380613a40565b600060016020601f8851018161339257fe5b0401905060006020601f8601816133a557fe5b0490506040518881526020810160005b848110156133d657806020028a0151816020028301528060010190506133b5565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f8551018161341c57fe5b040190506040518481526020810160005b8381101561344e57806020028601518160200283015280600101905061342d565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161348057fe5b040190506040518581526020810160005b838110156134b2578060200287015181602002830152806001019050613491565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816134ed57fe5b040190506040518481526020810160005b8381101561351f5780602002860151816020028301528060010190506134fe565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161355357fe5b040190506040518581526020810160005b83811015613585578060200287015181602002830152806001019050613564565b506020826020850260200184600d600019fa9450815193505050509250929050565b6135af613a65565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516135f985600001518660200151866000015187602001516136c6565b0190505b83600001518460200151018111613643578180600101925050826000015161363b8560200151830386600001510383866000015187602001516136c6565b0190506135fd565b5092915050565b613652613a65565b61365d8383836137a1565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801561369e5781602001600182028038833980820191505090505b50905060006020820190506136bc818560200151866000015161383f565b8192505050919050565b6000808490506000868511613791576020851161374b57600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b82811461373d5781861061372a578a8a019650505050505050613799565b858060010196505083865116905061370c565b859650505050505050613799565b60008585209050600091505b858803821161378f57600086842090508082141561377b5783945050505050613799565b600184019350508180600101925050613757565b505b868601925050505b949350505050565b6137a9613a65565b60006137c785600001518660200151866000015187602001516136c6565b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415613809576000856000018181525050613834565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b602081106138635781518352602083019250602082019150602081039050613840565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a001604052806060815260200160001515815260200160008152602001600060028111156138b757fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061390557805160ff1916838001178555613933565b82800160010185558215613933579182015b82811115613932578251825591602001919060010190613917565b5b5090506139409190613a7f565b5090565b82805482825590600052602060002090601f016020900481019282156139d95791602002820160005b838211156139aa57835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030261396d565b80156139d75782816101000a81549060ff02191690556001016020816000010492830192600103026139aa565b505b5090506139e69190613aa4565b5090565b815481835581811115613a1757600502816005028360005260206000209182019101613a169190613ad4565b5b505050565b5080546000825560050290600052602060002090810190613a3d9190613ad4565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613aa191905b80821115613a9d576000816000905550600101613a85565b5090565b90565b613ad191905b80821115613acd57600081816101000a81549060ff021916905550600101613aaa565b5090565b90565b613b4091905b80821115613b3c5760008082016000613af39190613b43565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613b339190613b8b565b50600501613ada565b5090565b90565b50805460018160011615610100020316600290046000825580601f10613b695750613b88565b601f016020900490600052602060002090810190613b879190613a7f565b5b50565b50805460008255601f016020900490600052602060002090810190613bb09190613a7f565b50565b600081359050613bc281614f18565b92915050565b600081519050613bd781614f18565b92915050565b600082601f830112613bee57600080fd5b8135613c01613bfc82614d06565b614cd9565b91508082526020830160208301858383011115613c1d57600080fd5b613c28838284614eb8565b50505092915050565b600082601f830112613c4257600080fd5b8135613c55613c5082614d32565b614cd9565b91508082526020830160208301858383011115613c7157600080fd5b613c7c838284614eb8565b50505092915050565b600081359050613c9481614f2f565b92915050565b600060208284031215613cac57600080fd5b6000613cba84828501613bc8565b91505092915050565b60008060408385031215613cd657600080fd5b6000613ce485828601613bb3565b9250506020613cf585828601613c85565b9150509250929050565b600060208284031215613d1157600080fd5b600082013567ffffffffffffffff811115613d2b57600080fd5b613d3784828501613c31565b91505092915050565b60008060408385031215613d5357600080fd5b600083013567ffffffffffffffff811115613d6d57600080fd5b613d7985828601613c31565b9250506020613d8a85828601613c85565b9150509250929050565b600080600060608486031215613da957600080fd5b600084013567ffffffffffffffff811115613dc357600080fd5b613dcf86828701613c31565b9350506020613de086828701613c85565b925050604084013567ffffffffffffffff811115613dfd57600080fd5b613e0986828701613bdd565b9150509250925092565b600080600060608486031215613e2857600080fd5b600084013567ffffffffffffffff811115613e4257600080fd5b613e4e86828701613c31565b9350506020613e5f86828701613c85565b9250506040613e7086828701613c85565b9150509250925092565b6000613e868383613fe8565b60208301905092915050565b6000613e9e8383613ff7565b60208301905092915050565b6000613eb68383614831565b905092915050565b6000613ec982614d88565b613ed38185614de7565b9350613ede83614d5e565b8060005b83811015613f0f578151613ef68882613e7a565b9750613f0183614dc0565b925050600181019050613ee2565b5085935050505092915050565b613f2581614d93565b613f2f8184614df8565b9250613f3a82614d6e565b8060005b83811015613f6b578151613f528782613e92565b9650613f5d83614dcd565b925050600181019050613f3e565b505050505050565b6000613f7e82614d9f565b613f888185614e03565b935083602082028501613f9a85614d78565b8060005b85811015613fd65784840389528151613fb78582613eaa565b9450613fc283614dda565b925060208a01995050600181019050613f9e565b50829750879550505050505092915050565b613ff181614e53565b82525050565b61400081614e5f565b82525050565b61400f81614ea6565b82525050565b61401e81614ea6565b82525050565b600061402f82614db5565b6140398185614e36565b9350614049818560208601614ec7565b80840191505092915050565b600061406082614daa565b61406a8185614e14565b935061407a818560208601614ec7565b61408381614efa565b840191505092915050565b600061409982614daa565b6140a38185614e36565b93506140b3818560208601614ec7565b80840191505092915050565b60006140cc601883614e25565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b600061410c601583614e25565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b600061414c602483614e25565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141b2601b83614e25565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b60006141f2601983614e25565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b6000614232601683614e25565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614272600f83614e25565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b60006142b2600e83614e25565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b60006142f2601883614e25565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b6000614332601083614e25565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b6000614372601383614e25565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b60006143b2600c83614e25565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b60006143f2600183614e36565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614432601683614e25565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b6000614472601583614e25565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b60006144b2602683614e25565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614518601683614e25565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b6000614558602383614e25565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145be601183614e25565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b60006145fe601883614e25565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b600061463e601f83614e25565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061467e600283614e36565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b60006146be601183614e25565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b60006146fe600e83614e25565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b600061473e601883614e25565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061477e601883614e25565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b60006147be601083614e25565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006147fe601983614e25565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a083016000830151848203600086015261484e8282614055565b91505060208301516148636020860182613fe8565b50604083015161487660408601826148ae565b5060608301516148896060860182614006565b50608083015184820360808601526148a18282613ebe565b9150508091505092915050565b6148b781614e9c565b82525050565b6148c681614e9c565b82525050565b60006148d8828461408e565b915081905092915050565b60006148ef8284614024565b915081905092915050565b6000614905826143e5565b9150819050919050565b600061491a82614671565b9150819050919050565b6000621000008201905061493b6000830184613f1c565b92915050565b6000602082019050818103600083015261495b8184613f73565b905092915050565b60006020820190506149786000830184614015565b92915050565b60006020820190508181036000830152614997816140bf565b9050919050565b600060208201905081810360008301526149b7816140ff565b9050919050565b600060208201905081810360008301526149d78161413f565b9050919050565b600060208201905081810360008301526149f7816141a5565b9050919050565b60006020820190508181036000830152614a17816141e5565b9050919050565b60006020820190508181036000830152614a3781614225565b9050919050565b60006020820190508181036000830152614a5781614265565b9050919050565b60006020820190508181036000830152614a77816142a5565b9050919050565b60006020820190508181036000830152614a97816142e5565b9050919050565b60006020820190508181036000830152614ab781614325565b9050919050565b60006020820190508181036000830152614ad781614365565b9050919050565b60006020820190508181036000830152614af7816143a5565b9050919050565b60006020820190508181036000830152614b1781614425565b9050919050565b60006020820190508181036000830152614b3781614465565b9050919050565b60006020820190508181036000830152614b57816144a5565b9050919050565b60006020820190508181036000830152614b778161450b565b9050919050565b60006020820190508181036000830152614b978161454b565b9050919050565b60006020820190508181036000830152614bb7816145b1565b9050919050565b60006020820190508181036000830152614bd7816145f1565b9050919050565b60006020820190508181036000830152614bf781614631565b9050919050565b60006020820190508181036000830152614c17816146b1565b9050919050565b60006020820190508181036000830152614c37816146f1565b9050919050565b60006020820190508181036000830152614c5781614731565b9050919050565b60006020820190508181036000830152614c7781614771565b9050919050565b60006020820190508181036000830152614c97816147b1565b9050919050565b60006020820190508181036000830152614cb7816147f1565b9050919050565b6000602082019050614cd360008301846148bd565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614cfc57600080fd5b8060405250919050565b600067ffffffffffffffff821115614d1d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614d4957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e4c82614e7c565b9050919050565b60008115159050919050565b6000819050919050565b6000819050614e7782614f0b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614eb182614e69565b9050919050565b82818337600083830152505050565b60005b83811015614ee5578082015181840152602081019050614eca565b83811115614ef4576000848401525b50505050565b6000601f19601f8301169050919050565b60038110614f1557fe5b50565b614f2181614e41565b8114614f2c57600080fd5b50565b614f3881614e9c565b8114614f4357600080fd5b5056fea365627a7a723158202ae226b25ad72f9cff2d74c6dc7bcfb78530ab1d2438f48a8dab67499b37a8e56c6578706572696d656e74616cf564736f6c634300050d0040", + "storage": { + "0x0": "2868903936" + }, + "nonce": "0" + }, + "0xD1001000000000000000000000000000000000D1": { + "balance": "0", + "code": "0x608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b348015604f57600080fd5b506056606c565b6040518082815260200191505060405180910390f35b60006001600060048152602001908152602001600020600060098152602001908152602001600020600101549050905600a165627a7a723058208fe64219becc0bcab1c8f854f05804ebb6bb555da5dbc49e8f7021c31d77636a0029", + "storage": { + "0x3b4da637a1b0e6dbfc6795f2b7f0cb29eebb91b3af4dcc335e1633f6b4af810b": "1111" + }, + "nonce": "0" + }, + "0xca4409573a5129a72edf85d6c51e26760fc9c903": { "balance": "100000000000000000000000" }, + "0x62d8b22c1d71577829b2fee20a5c3fff43aed0ec": { "balance": "100000000000000000000000" }, + "0x1C9abe4ff0CcECa40fc404c74AB7d4923fEF8901": { "balance": "100000000000000000000000" }, + "0xf9817fB82fc767aA9A4A97a1901676244b88ce0E": { "balance": "100000000000000000000000" }, + "0x7a89A6c323FaCfF0ADeF7EEF3e491aD4044d0592": { "balance": "100000000000000000000000" }, + "0x81dcbd71da28fafb9ca99ff5a22bfcebba84fecc": { "balance": "100000000000000000000000" }, + "0xd2c5b39B4e735C17612Bb5a08FD024ccc5dBCb23": { "balance": "100000000000000000000000" }, + "0xD3001000000000000000000000000000000000D3": { + "balance": "0", + "nonce": "0", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103ca565b34801561012d57600080fd5b506100b3610496565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104a5945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105dd565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661068d565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b0316610785565b6000806060836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107e4565b6000546001600160a01b03908116911614610380576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103d26107e4565b6000546001600160a01b03908116911614610422576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104ad6107e4565b6000546001600160a01b039081169116146104fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057357818101518382015260200161055b565b50505050905090810190601f1680156105a05780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105bf57600080fd5b505af11580156105d3573d6000803e3d6000fd5b5050505050505050565b6105e56107e4565b6000546001600160a01b03908116911614610635576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561047a57600080fd5b6106956107e4565b6000546001600160a01b039081169116146106e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061080f833981519152604482015290519081900360640190fd5b6001600160a01b03811661072a5760405162461bcd60e51b81526004018080602001828103825260268152602001806107e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806060836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d968ac32bef5562c6b4f1bd5d2f2a74c14d07ce008ca6fdc5a3bd0f5fc265f564736f6c63430006080033", + "storage": { + "0x0": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6" + } + }, + "0xD3002000000000000000000000000000000000D3": { + "balance": "0", + "nonce": "0", + "code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610292565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b03166102cf565b34801561018857600080fd5b5061012d610389565b6101996103ba565b6101a96101a461041a565b61043f565b565b6101b3610463565b6001600160a01b0316336001600160a01b031614156101da576101d581610488565b6101e2565b6101e2610191565b50565b6101ed610463565b6001600160a01b0316336001600160a01b031614156102855761020f83610488565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461026c576040519150601f19603f3d011682016040523d82523d6000602084013e610271565b606091505b505090508061027f57600080fd5b5061028d565b61028d610191565b505050565b600061029c610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd61041a565b90506102cc565b6102cc610191565b90565b6102d7610463565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103355760405162461bcd60e51b81526004018080602001828103825260368152602001806105876036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61035e610463565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c8565b6000610393610463565b6001600160a01b0316336001600160a01b031614156102c4576102bd610463565b3b151590565b6103c2610463565b6001600160a01b0316336001600160a01b031614156104125760405162461bcd60e51b81526004018080602001828103825260328152602001806105556032913960400191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b610491816104ec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104f5816103b4565b6105305760405162461bcd60e51b815260040180806020018281038252603b8152602001806105bd603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5556fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212206e221e2a3547bd97244b05ed46430b1b078ba097cb2a4e25ec3d79cf9ac9f02c64736f6c63430006080033", + "storage": { + "0x0": "1000000", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0xD3001000000000000000000000000000000000D3", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0xD3003000000000000000000000000000000000D3" + } + }, + "0xD3003000000000000000000000000000000000D3": { + "balance": "0", + "nonce": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806379210e8e1161007157806379210e8e1461017757806381a8235a146101a757806385aeeb17146101c35780639a9a5593146101f3578063a99100541461020f578063b57321221461022b576100b4565b806307c6e7d3146100b9578063122f4fba146100d55780631c6ec7a9146101055780631cfe4e3b14610121578063373dedb41461013d57806361e46db51461015b575b600080fd5b6100d360048036036100ce9190810190613e94565b61025b565b005b6100ef60048036036100ea9190810190613e94565b610862565b6040516100fc9190614b38565b60405180910390f35b61011f600480360361011a9190810190613e94565b610ba1565b005b61013b60048036036101369190810190613e58565b610fce565b005b6101456111ec565b6040516101529190614eb3565b60405180910390f35b61017560048036036101709190810190613f29565b6111f6565b005b610191600480360361018c9190810190613fa8565b611456565b60405161019e9190614af9565b60405180910390f35b6101c160048036036101bc9190810190613e94565b611756565b005b6101dd60048036036101d89190810190613e94565b6118fb565b6040516101ea9190614b16565b60405180910390f35b61020d60048036036102089190810190613ed5565b611bfa565b005b61022960048036036102249190810190613e94565b612195565b005b61024560048036036102409190810190613e94565b612849565b6040516102529190614eb3565b60405180910390f35b6000339050606061026b83612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b825181101561037c576000826001018460018403815181106102d557fe5b60200260200101516040516102ea9190614aa1565b90815260200160405180910390205411610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090614cb3565b60405180910390fd5b8160020183600183038151811061034c57fe5b60200260200101516040516103619190614aa1565b908152602001604051809103902091508060010190506102b7565b506060600183511161038e57846103a7565b8260018451038151811061039e57fe5b60200260200101515b9050600082600101826040516103bd9190614ab8565b9081526020016040518091039020541161040c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040390614cb3565b60405180910390fd5b600082600201826040516104209190614ab8565b90815260200160405180910390206000018054905014610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c90614d33565b60405180910390fd5b60006104818587612cc9565b9050806104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ba90614c53565b60405180910390fd5b6104cb613a4f565b836000016001856000018054905003815481106104e457fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156105e257fe5b60028111156105ed57fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561066557602002820191906000526020600020906000905b82829054906101000a900460ff1615158152602001906001019060208260000104928301926001038202915080841161062f5790505b50505050508152505090508084600001600186600101866040516106899190614ab8565b90815260200160405180910390205403815481106106a357fe5b906000526020600020906005020160008201518160000190805190602001906106cd929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561071c57fe5b0217905550608082015181600401908051906020019061073d929190613b0b565b5090505083600101836040516107539190614ab8565b9081526020016040518091039020548460010182600001516040516107789190614aa1565b9081526020016040518091039020819055506000846001018460405161079e9190614ab8565b908152602001604051809103902081905550836000018054806107bd57fe5b6001900381819060005260206000209060050201600080820160006107e29190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006108229190613bf9565b5050905583600201836040516108389190614ab8565b9081526020016040518091039020600080820160006108579190613c21565b505050505050505050565b600080606061087084612d2d565b91509150606061087f82612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610964576000826001018460018403815181106108e957fe5b60200260200101516040516108fe9190614aa1565b908152602001604051809103902054141561092157600095505050505050610b9c565b8160020183600183038151811061093457fe5b60200260200101516040516109499190614aa1565b908152602001604051809103902091508060010190506108cb565b5060606001835111610976578361098f565b8260018451038151811061098657fe5b60200260200101515b9050600082600101826040516109a59190614ab8565b90815260200160405180910390205414156109c857600095505050505050610b9c565b6109d0613a4f565b82600001600184600101846040516109e89190614ab8565b9081526020016040518091039020540381548110610a0257fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115610b0057fe5b6002811115610b0b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015610b8357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411610b4d5790505b5050505050815250509050806060015196505050505050505b919050565b600360009054906101000a900460ff16610be457612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b6000815111610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90614cb3565b60405180910390fd5b60003390506060610c3883612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015610d4957600082600101846001840381518110610ca257fe5b6020026020010151604051610cb79190614aa1565b90815260200160405180910390205411610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614cb3565b60405180910390fd5b81600201836001830381518110610d1957fe5b6020026020010151604051610d2e9190614aa1565b90815260200160405180910390209150806001019050610c84565b50600454816000018054905010610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614dd3565b60405180910390fd5b60606001835111610da65784610dbf565b82600184510381518110610db657fe5b60200260200101515b905060008260010182604051610dd59190614ab8565b90815260200160405180910390205414610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90614e13565b60405180910390fd5b610e2d816130af565b610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614cd3565b60405180910390fd5b6000610e788587613190565b905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190614b73565b60405180910390fd5b610ec2613a4f565b8281600001819052506000816020019015159081151581525050836000018190806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019080519060200190610f26929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610f7557fe5b02179055506080820151816004019080519060200190610f96929190613b0b565b50505083600001805490508460010184604051610fb39190614ab8565b90815260200160405180910390208190555050505050505050565b610fd66131f4565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061103b57503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614155b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190614c33565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f390614d13565b60405180910390fd5b60025460095482011115611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614b93565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460096000828254039250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806009600082825401925050819055505050565b6000600254905090565b60003390506000611207828661328d565b90506001600281111561121657fe5b8160030160009054906101000a900460ff16600281111561123357fe5b14611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614df3565b60405180910390fd5b6000600554858161128057fe5b061480156112915750806002015484105b6112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b53565b60405180910390fd5b600554848260020154031080156112ed5750838160020154038351145b806112fa57506005548351145b611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614bf3565b60405180910390fd5b6000151581600401600554868161134c57fe5b048154811061135757fe5b90600052602060002090602091828204019190069054906101000a900460ff161515146113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090614bd3565b60405180910390fd5b60006113c78387878761348c565b905080611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090614cf3565b60405180910390fd5b600182600401600554878161141a57fe5b048154811061142557fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550505050505050565b61145e613c45565b6000606061146b86612d2d565b91509150611477613a4f565b611481838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561157157fe5b600281111561157c57fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156115f457602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116115be5790505b505050505081525050905060028081111561160b57fe5b8160600151600281111561161b57fe5b1461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290614e93565b60405180910390fd5b600554851115801561166d5750600085115b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390614bf3565b60405180910390fd5b806040015185870111156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90614b53565b60405180910390fd5b60006117038484898961353d565b80965081925050508061174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290614d73565b60405180910390fd5b505050509392505050565b60003390506000611767828461328d565b90506001600281111561177657fe5b8160030160009054906101000a900460ff16600281111561179357fe5b146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614df3565b60405180910390fd5b60006001905060008260040180549050905060008090505b8181101561183e576000151584600401828154811061180657fe5b90600052602060002090602091828204019190069054906101000a900460ff161515141561183357600092505b8060010190506117eb565b508161187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690614d53565b60405180910390fd5b60028360030160006101000a81548160ff021916908360028111156118a057fe5b021790555060006118b185876135d0565b9050806118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614bb3565b60405180910390fd5b505050505050565b60606000606061190a84612d2d565b91509150606061191982612ac9565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8251811015611a235760008260010184838151811061197f57fe5b60200260200101516040516119949190614aa1565b908152602001604051809103902054116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90614cb3565b60405180910390fd5b816002018382815181106119f357fe5b6020026020010151604051611a089190614aa1565b90815260200160405180910390209150806001019050611964565b5080600001805480602002602001604051908101604052809291908181526020016000905b82821015611beb57838290600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b045780601f10611ad957610100808354040283529160200191611b04565b820191906000526020600020905b815481529060010190602001808311611ae757829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff166002811115611b5057fe5b6002811115611b5b57fe5b815260200160048201805480602002602001604051908101604052809291908181526020018280548015611bd357602002820191906000526020600020906000905b82829054906101000a900460ff16151581526020019060010190602082600001049283019260010382029150808411611b9d5790505b50505050508152505081526020019060010190611a48565b50505050945050505050919050565b600360009054906101000a900460ff16611c3d57612000600481905550621000006005819055506001600360006101000a81548160ff0219169083151502179055505b60003390506305f5e100821115611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614db3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483011115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390614e33565b60405180910390fd5b6060611d5784612ac9565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015611e6857600082600101846001840381518110611dc157fe5b6020026020010151604051611dd69190614aa1565b90815260200160405180910390205411611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614cb3565b60405180910390fd5b81600201836001830381518110611e3857fe5b6020026020010151604051611e4d9190614aa1565b90815260200160405180910390209150806001019050611da3565b50600454816000018054905010611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90614dd3565b60405180910390fd5b60606001835111611ec55785611ede565b82600184510381518110611ed557fe5b60200260200101515b905060008260010182604051611ef49190614ab8565b90815260200160405180910390205414611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614e13565b60405180910390fd5b611f4c816130af565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614d93565b60405180910390fd5b6000611f98858888613634565b905080611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd190614e73565b60405180910390fd5b6060600554600160055489010381611fee57fe5b0460405190808252806020026020018201604052801561201d5781602001602082028038833980820191505090505b509050836000016040518060a001604052808581526020016001151581526020018981526020016001600281111561205157fe5b8152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908051906020019061209f929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156120ee57fe5b0217905550608082015181600401908051906020019061210f929190613b0b565b5050508360000180549050846001018460405161212c9190614ab8565b90815260200160405180910390208190555086600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050505050505050565b60003390506121a2613a4f565b6121ac828461328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561229c57fe5b60028111156122a757fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561231f57602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116122e95790505b50505050508152505090506000600281111561233757fe5b8160600151600281111561234757fe5b1415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614c13565b60405180910390fd5b600061239483856136a1565b9050806123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90614c73565b60405180910390fd5b60606123e185612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b8251811015612479578160020183600183038151811061244957fe5b602002602001015160405161245e9190614aa1565b9081526020016040518091039020915080600101905061242d565b50600060018260010186600001516040516124949190614aa1565b9081526020016040518091039020540390506124ae613a4f565b826000016001846000018054905003815481106124c757fe5b90600052602060002090600502016040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125795780601f1061254e57610100808354040283529160200191612579565b820191906000526020600020905b81548152906001019060200180831161255c57829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff1660028111156125c557fe5b60028111156125d057fe5b81526020016004820180548060200260200160405190810160405280929190818152602001828054801561264857602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116126125790505b50505050508152505090508083600001838154811061266357fe5b9060005260206000209060050201600082015181600001908051906020019061268d929190613a8b565b5060208201518160010160006101000a81548160ff0219169083151502179055506040820151816002015560608201518160030160006101000a81548160ff021916908360028111156126dc57fe5b021790555060808201518160040190805190602001906126fd929190613b0b565b509050508260000180548061270e57fe5b6001900381819060005260206000209060050201600080820160006127339190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff02191690556004820160006127739190613bf9565b5050905582600101866000015160405161278d9190614aa1565b9081526020016040518091039020548360010182600001516040516127b29190614aa1565b90815260200160405180910390208190555060008360010187600001516040516127dc9190614aa1565b9081526020016040518091039020819055508560400151600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050505050505050565b600080606061285784612d2d565b91509150612863613a4f565b61286d838361328d565b6040518060a0016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129115780601f106128e657610100808354040283529160200191612911565b820191906000526020600020905b8154815290600101906020018083116128f457829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152602001600282015481526020016003820160009054906101000a900460ff16600281111561295d57fe5b600281111561296857fe5b8152602001600482018054806020026020016040519081016040528092919081815260200182805480156129e057602002820191906000526020600020906000905b82829054906101000a900460ff161515815260200190600101906020826000010492830192600103820291508084116129aa5790505b5050505050815250509050600160028111156129f857fe5b81606001516002811115612a0857fe5b1480612a2d5750600280811115612a1b57fe5b81606001516002811115612a2b57fe5b145b612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614df3565b60405180910390fd5b6000612a788484613705565b809650819250505080612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab790614e53565b60405180910390fd5b50505050919050565b6060612ad3613c6a565b612adc8361376e565b9050612ae6613c6a565b612b246040518060400160405280600181526020017f2f0000000000000000000000000000000000000000000000000000000000000081525061376e565b905060606001612b3d838561379c90919063ffffffff16565b01604051908082528060200260200182016040528015612b7157816020015b6060815260200190600190039081612b5c5790505b50905060008090505b8151811015612bc257612b9e612b99848661381190919063ffffffff16565b61382b565b828281518110612baa57fe5b60200260200101819052508080600101915050612b7a565b50600081600183510381518110612bd557fe5b6020026020010151511415612c405780600182510381518110612bf457fe5b6020026020010160608152506001815103604051908082528060200260200182016040528015612c3857816020015b6060815260200190600190039081612c235790505b509350612c79565b8051604051908082528060200260200182016040528015612c7557816020015b6060815260200190600190039081612c605790505b5093505b60008090505b8451811015612cc057818181518110612c9457fe5b6020026020010151858281518110612ca857fe5b60200260200101819052508080600101915050612c7f565b50505050919050565b60008060016020601f85510181612cdc57fe5b040190506040518481526020810160005b83811015612d0e578060200286015181602002830152806001019050612ced565b50602082602085026040018460006010600019f1935050505092915050565b6000606060006028905080845111612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190614c93565b60405180910390fd5b6060816040519080825280601f01601f191660200182016040528015612daf5781602001600182028038833980820191505090505b50905060008090505b82811015612e1f57858181518110612dcc57fe5b602001015160f81c60f81b828281518110612de357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612db8565b50600080905060008090505b83811015612f4e576000838281518110612e4157fe5b602001015160f81c60f81b60f81c60ff16905060308110158015612e66575060398111155b80612e7f575060418110158015612e7e5750605a8111155b5b80612e98575060618110158015612e97575060668111155b5b612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614c93565b60405180910390fd5b60308110158015612ee9575060398111155b15612efa5760308103601084020192505b60418110158015612f0c5750605a8111155b15612f1d5760378103601084020192505b60618110158015612f2f575060668111155b15612f405760578103601084020192505b508080600101915050612e2b565b508094507f2f00000000000000000000000000000000000000000000000000000000000000868481518110612f7f57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe390614c93565b60405180910390fd5b6000600184885103039050806040519080825280601f01601f19166020018201604052801561302a5781602001600182028038833980820191505090505b50945060008090505b818110156130a5576000886001878401018151811061304e57fe5b602001015160f81c60f81b90508087838151811061306857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050613033565b5050505050915091565b60006040516020016130c090614ae4565b60405160208183030381529060405280519060200120826040516020016130e79190614ab8565b604051602081830303815290604052805190602001201480613152575060405160200161311390614acf565b604051602081830303815290604052805190602001208260405160200161313a9190614ab8565b60405160208183030381529060405280519060200120145b8061315e575060008251145b1561316c576000905061318b565b60008251905060ff81111561318557600091505061318b565b60019150505b919050565b60008060016020601f855101816131a357fe5b040190506040518481526020810160005b838110156131d55780602002860151816020028301528060010190506131b4565b5060208260208502604001846000600f600019f1935050505092915050565b600073d2001000000000000000000000000000000000d273ffffffffffffffffffffffffffffffffffffffff166383e781fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132889190810190613e2f565b905090565b6000606061329a83612ac9565b90506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600190505b82518110156133ab5760008260010184600184038151811061330457fe5b60200260200101516040516133199190614aa1565b90815260200160405180910390205411613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614cb3565b60405180910390fd5b8160020183600183038151811061337b57fe5b60200260200101516040516133909190614aa1565b908152602001604051809103902091508060010190506132e6565b50606060018351116133bd57846133d6565b826001845103815181106133cd57fe5b60200260200101515b9050600082600101826040516133ec9190614ab8565b9081526020016040518091039020541161343b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343290614cb3565b60405180910390fd5b600082600001600184600101846040516134559190614ab8565b908152602001604051809103902054038154811061346f57fe5b906000526020600020906005020190508094505050505092915050565b60008060016020601f8551018161349f57fe5b04019050600060016020601f885101816134b557fe5b040190506040518781526020810160005b838110156134e75780602002890151816020028301528060010190506134c6565b50868360200282015260005b8481101561351957806020028701518185600101016020028301528060010190506134f3565b50602082848601602002606001846000600c600019f1945050505050949350505050565b6000613547613c45565b600060016020601f8851018161355957fe5b0401905060006020601f86018161356c57fe5b0490506040518881526020810160005b8481101561359d57806020028a01518160200283015280600101905061357c565b5083602002810188815287816020015283602002868660030160200285600a600019fa9650505050505094509492505050565b60008060016020601f855101816135e357fe5b040190506040518481526020810160005b838110156136155780602002860151816020028301528060010190506135f4565b50602082602085026040018460006011600019f1935050505092915050565b60008060016020601f8651018161364757fe5b040190506040518581526020810160005b83811015613679578060200287015181602002830152806001019050613658565b50846020840282015260208260208502604001846000600b600019f193505050509392505050565b60008060016020601f855101816136b457fe5b040190506040518481526020810160005b838110156136e65780602002860151816020028301528060010190506136c5565b5060208260208502604001846000600e600019f1935050505092915050565b600080600060016020601f8651018161371a57fe5b040190506040518581526020810160005b8381101561374c57806020028701518160200283015280600101905061372b565b506020826020850260200184600d600019fa9450815193505050509250929050565b613776613c6a565b600060208301905060405180604001604052808451815260200182815250915050919050565b60008082600001516137c0856000015186602001518660000151876020015161388d565b0190505b8360000151846020015101811161380a578180600101925050826000015161380285602001518303866000015103838660000151876020015161388d565b0190506137c4565b5092915050565b613819613c6a565b613824838383613968565b5092915050565b60608082600001516040519080825280601f01601f1916602001820160405280156138655781602001600182028038833980820191505090505b50905060006020820190506138838185602001518660000151613a06565b8192505050919050565b6000808490506000868511613958576020851161391257600060018660200360080260020a031960001b905060008186511690506000878a8a0103905060008386511690505b828114613904578186106138f1578a8a019650505050505050613960565b85806001019650508386511690506138d3565b859650505050505050613960565b60008585209050600091505b85880382116139565760008684209050808214156139425783945050505050613960565b60018401935050818060010192505061391e565b505b868601925050505b949350505050565b613970613c6a565b600061398e856000015186602001518660000151876020015161388d565b905084602001518360200181815250508460200151810383600001818152505084600001518560200151018114156139d05760008560000181815250506139fb565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b5b60208110613a2a5781518352602083019250602082019150602081039050613a07565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6040518060a00160405280606081526020016000151581526020016000815260200160006002811115613a7e57fe5b8152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613acc57805160ff1916838001178555613afa565b82800160010185558215613afa579182015b82811115613af9578251825591602001919060010190613ade565b5b509050613b079190613c84565b5090565b82805482825590600052602060002090601f01602090048101928215613ba05791602002820160005b83821115613b7157835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302613b34565b8015613b9e5782816101000a81549060ff0219169055600101602081600001049283019260010302613b71565b505b509050613bad9190613ca9565b5090565b50805460018160011615610100020316600290046000825580601f10613bd75750613bf6565b601f016020900490600052602060002090810190613bf59190613c84565b5b50565b50805460008255601f016020900490600052602060002090810190613c1e9190613c84565b50565b5080546000825560050290600052602060002090810190613c429190613cd9565b50565b6040518062100000016040528061800090602082028038833980820191505090505090565b604051806040016040528060008152602001600081525090565b613ca691905b80821115613ca2576000816000905550600101613c8a565b5090565b90565b613cd691905b80821115613cd257600081816101000a81549060ff021916905550600101613caf565b5090565b90565b613d4591905b80821115613d415760008082016000613cf89190613bb1565b6001820160006101000a81549060ff021916905560028201600090556003820160006101000a81549060ff0219169055600482016000613d389190613bf9565b50600501613cdf565b5090565b90565b600081359050613d578161510d565b92915050565b600081519050613d6c8161510d565b92915050565b600082601f830112613d8357600080fd5b8135613d96613d9182614efb565b614ece565b91508082526020830160208301858383011115613db257600080fd5b613dbd8382846150ad565b50505092915050565b600082601f830112613dd757600080fd5b8135613dea613de582614f27565b614ece565b91508082526020830160208301858383011115613e0657600080fd5b613e118382846150ad565b50505092915050565b600081359050613e2981615124565b92915050565b600060208284031215613e4157600080fd5b6000613e4f84828501613d5d565b91505092915050565b60008060408385031215613e6b57600080fd5b6000613e7985828601613d48565b9250506020613e8a85828601613e1a565b9150509250929050565b600060208284031215613ea657600080fd5b600082013567ffffffffffffffff811115613ec057600080fd5b613ecc84828501613dc6565b91505092915050565b60008060408385031215613ee857600080fd5b600083013567ffffffffffffffff811115613f0257600080fd5b613f0e85828601613dc6565b9250506020613f1f85828601613e1a565b9150509250929050565b600080600060608486031215613f3e57600080fd5b600084013567ffffffffffffffff811115613f5857600080fd5b613f6486828701613dc6565b9350506020613f7586828701613e1a565b925050604084013567ffffffffffffffff811115613f9257600080fd5b613f9e86828701613d72565b9150509250925092565b600080600060608486031215613fbd57600080fd5b600084013567ffffffffffffffff811115613fd757600080fd5b613fe386828701613dc6565b9350506020613ff486828701613e1a565b925050604061400586828701613e1a565b9150509250925092565b600061401b838361417d565b60208301905092915050565b6000614033838361418c565b60208301905092915050565b600061404b8383614a06565b905092915050565b600061405e82614f7d565b6140688185614fdc565b935061407383614f53565b8060005b838110156140a457815161408b888261400f565b975061409683614fb5565b925050600181019050614077565b5085935050505092915050565b6140ba81614f88565b6140c48184614fed565b92506140cf82614f63565b8060005b838110156141005781516140e78782614027565b96506140f283614fc2565b9250506001810190506140d3565b505050505050565b600061411382614f94565b61411d8185614ff8565b93508360208202850161412f85614f6d565b8060005b8581101561416b578484038952815161414c858261403f565b945061415783614fcf565b925060208a01995050600181019050614133565b50829750879550505050505092915050565b61418681615048565b82525050565b61419581615054565b82525050565b6141a48161509b565b82525050565b6141b38161509b565b82525050565b60006141c482614faa565b6141ce818561502b565b93506141de8185602086016150bc565b80840191505092915050565b60006141f582614f9f565b6141ff8185615009565b935061420f8185602086016150bc565b614218816150ef565b840191505092915050565b600061422e82614f9f565b614238818561502b565b93506142488185602086016150bc565b80840191505092915050565b600061426160188361501a565b91507f496e636f7272656374206368756e6b20706f736974696f6e00000000000000006000830152602082019050919050565b60006142a160158361501a565b91507f4469726563746f7279206e6f74206372656174656400000000000000000000006000830152602082019050919050565b60006142e160248361501a565b91507f4e6f7420656e6f756768206d656d6f727920696e207468652046696c6573746f60008301527f72616765000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614347601b8361501a565b91507f48617368206861736e2774206265656e2063616c63756c6174656400000000006000830152602082019050919050565b600061438760198361501a565b91507f4368756e6b20697320616c72656164792075706c6f61646564000000000000006000830152602082019050919050565b60006143c760168361501a565b91507f496e636f7272656374206368756e6b206c656e677468000000000000000000006000830152602082019050919050565b6000614407600f8361501a565b91507f46696c65206e6f742065786973747300000000000000000000000000000000006000830152602082019050919050565b6000614447600e8361501a565b91507f496e76616c69642073656e6465720000000000000000000000000000000000006000830152602082019050919050565b600061448760188361501a565b91507f4469726563746f7279206973206e6f742064656c6574656400000000000000006000830152602082019050919050565b60006144c760108361501a565b91507f46696c65206e6f742064656c65746564000000000000000000000000000000006000830152602082019050919050565b600061450760138361501a565b91507f496e76616c69642073746f7261676550617468000000000000000000000000006000830152602082019050919050565b6000614547600c8361501a565b91507f496e76616c6964207061746800000000000000000000000000000000000000006000830152602082019050919050565b600061458760018361502b565b91507f2e000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b60006145c760168361501a565b91507f496e76616c6964206469726563746f7279206e616d65000000000000000000006000830152602082019050919050565b600061460760158361501a565b91507f4368756e6b207761736e27742075706c6f6164656400000000000000000000006000830152602082019050919050565b600061464760268361501a565b91507f436f756c64206e6f742072657365727665206c657373207468616e207573656460008301527f20737061636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146ad60168361501a565b91507f4469726563746f7279206973206e6f7420656d707479000000000000000000006000830152602082019050919050565b60006146ed60238361501a565b91507f46696c65206861736e2774206265656e2075706c6f6164656420636f7272656360008301527f746c7900000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061475360118361501a565b91507f4368756e6b207761736e277420726561640000000000000000000000000000006000830152602082019050919050565b600061479360188361501a565b91507f46696c656e616d652073686f756c64206265203c2032353600000000000000006000830152602082019050919050565b60006147d3601f8361501a565b91507f46696c652073686f756c64206265206c657373207468616e20313030204d42006000830152602082019050919050565b600061481360028361502b565b91507f2e2e0000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061485360118361501a565b91507f4469726563746f72792069732066756c6c0000000000000000000000000000006000830152602082019050919050565b6000614893600e8361501a565b91507f46696c65206e6f7420666f756e640000000000000000000000000000000000006000830152602082019050919050565b60006148d360188361501a565b91507f46696c65206f72206469726563746f72792065786973747300000000000000006000830152602082019050919050565b600061491360198361501a565b91507f4e6f7420656e6f756768207265736572766564207370616365000000000000006000830152602082019050919050565b600061495360188361501a565b91507f45564d206572726f7220696e2067657446696c6553697a6500000000000000006000830152602082019050919050565b600061499360108361501a565b91507f46696c65206e6f742063726561746564000000000000000000000000000000006000830152602082019050919050565b60006149d360198361501a565b91507f46696c65206861736e2774206265656e2075706c6f61646564000000000000006000830152602082019050919050565b600060a0830160008301518482036000860152614a2382826141ea565b9150506020830151614a38602086018261417d565b506040830151614a4b6040860182614a83565b506060830151614a5e606086018261419b565b5060808301518482036080860152614a768282614053565b9150508091505092915050565b614a8c81615091565b82525050565b614a9b81615091565b82525050565b6000614aad8284614223565b915081905092915050565b6000614ac482846141b9565b915081905092915050565b6000614ada8261457a565b9150819050919050565b6000614aef82614806565b9150819050919050565b60006210000082019050614b1060008301846140b1565b92915050565b60006020820190508181036000830152614b308184614108565b905092915050565b6000602082019050614b4d60008301846141aa565b92915050565b60006020820190508181036000830152614b6c81614254565b9050919050565b60006020820190508181036000830152614b8c81614294565b9050919050565b60006020820190508181036000830152614bac816142d4565b9050919050565b60006020820190508181036000830152614bcc8161433a565b9050919050565b60006020820190508181036000830152614bec8161437a565b9050919050565b60006020820190508181036000830152614c0c816143ba565b9050919050565b60006020820190508181036000830152614c2c816143fa565b9050919050565b60006020820190508181036000830152614c4c8161443a565b9050919050565b60006020820190508181036000830152614c6c8161447a565b9050919050565b60006020820190508181036000830152614c8c816144ba565b9050919050565b60006020820190508181036000830152614cac816144fa565b9050919050565b60006020820190508181036000830152614ccc8161453a565b9050919050565b60006020820190508181036000830152614cec816145ba565b9050919050565b60006020820190508181036000830152614d0c816145fa565b9050919050565b60006020820190508181036000830152614d2c8161463a565b9050919050565b60006020820190508181036000830152614d4c816146a0565b9050919050565b60006020820190508181036000830152614d6c816146e0565b9050919050565b60006020820190508181036000830152614d8c81614746565b9050919050565b60006020820190508181036000830152614dac81614786565b9050919050565b60006020820190508181036000830152614dcc816147c6565b9050919050565b60006020820190508181036000830152614dec81614846565b9050919050565b60006020820190508181036000830152614e0c81614886565b9050919050565b60006020820190508181036000830152614e2c816148c6565b9050919050565b60006020820190508181036000830152614e4c81614906565b9050919050565b60006020820190508181036000830152614e6c81614946565b9050919050565b60006020820190508181036000830152614e8c81614986565b9050919050565b60006020820190508181036000830152614eac816149c6565b9050919050565b6000602082019050614ec86000830184614a92565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ef157600080fd5b8060405250919050565b600067ffffffffffffffff821115614f1257600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614f3e57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b60006180009050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061504182615071565b9050919050565b60008115159050919050565b6000819050919050565b600081905061506c82615100565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006150a68261505e565b9050919050565b82818337600083830152505050565b60005b838110156150da5780820151818401526020810190506150bf565b838111156150e9576000848401525b50505050565b6000601f19601f8301169050919050565b6003811061510a57fe5b50565b61511681615036565b811461512157600080fd5b50565b61512d81615091565b811461513857600080fd5b5056fea2646970667358221220a549ad9e778ae8bb3048c0a1805e77745871cc1560637ae1c3ebccb76638d9c464736f6c63430006020033", + "storage": {} + } + }, + + "skaleConfig": { + "nodeInfo": { + "nodeName": "Node1", + "nodeID": 1112, + "bindIP": "0.0.0.0", + "basePort": 1231, + "httpRpcPort": 1234, + "httpsRpcPort": 1239, + "wsRpcPort": 1233, + "wssRpcPort": 1238, + "logLevel": "info", + "logLevelProposal": "info", + "rotateAfterBlock": 0, + "ecdsaKeyName": "", + "minCacheSize": 1000, + "maxCacheSize": 2000, + "collectionQueueSize": 2, + "collectionDuration": 10, + "transactionQueueSize": 10000, + "maxOpenLeveldbFiles": 25, + "testSignatures": true + }, + "sChain": { + "schainName": "TestChain", + "schainID": 5, + "schainOwner": "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6", + "contractStorageLimit": 10000000000, + "emptyBlockIntervalMs": 10000, + "contractStorageZeroValuePatchTimestamp": 1, + "revertableFSPatchTimestamp": 1, + "contractStoragePatchTimestamp": 1, + "verifyDaSigsPatchTimestamp": 1, + "storageDestructionPatchTimestamp": 1, + "powCheckPatchTimestamp": 1, + "skipInvalidTransactionsPatchTimestamp": 1, + "pushZeroPatchTimestamp": 1, + "precompiledConfigPatchTimestamp": 1, + "correctForkInPowPatchTimestamp": 1, + "EIP1559TransactionsPatchTimestamp": 1, + "fastConsensusPatchTimestamp": 1, + "flexibleDeploymentPatchTimestamp": 1, + "verifyBlsSyncPatchTimestamp": 1, + "multiTransactionMode": true, + "levelDBReopenIntervalMs": 1, + "nodes": [ + { "nodeID": 1112, "ip": "127.0.0.1", "basePort": 1231, "schainIndex" : 1, "publicKey":""} + ] + } + } +} + + + diff --git a/test/historicstate/hardhat/scripts/infinite_transaction_loop_with_call.ts b/test/historicstate/hardhat/scripts/infinite_transaction_loop_with_call.ts new file mode 100644 index 000000000..61ac002c0 --- /dev/null +++ b/test/historicstate/hardhat/scripts/infinite_transaction_loop_with_call.ts @@ -0,0 +1,225 @@ +import {mkdir, readdir, writeFileSync, readFile, unlink} from "fs"; + +const fs = require('fs'); +import {existsSync} from "fs"; +import deepDiff, {diff} from 'deep-diff'; +import {expect} from "chai"; +import * as path from 'path'; +import {int, string} from "hardhat/internal/core/params/argumentTypes"; +import internal from "node:stream"; + +const OWNER_ADDRESS: string = "0x907cd0881E50d359bb9Fd120B1A5A143b1C97De6"; +const CALL_ADDRESS: string = "0xCe5c7ca85F8cB94FA284a303348ef42ADD23f5e7"; + +const ZERO_ADDRESS: string = '0x0000000000000000000000000000000000000000'; +const INITIAL_MINT: bigint = 10000000000000000000000000000000000000000n; +const TEST_CONTRACT_NAME = "Tracer"; +const EXECUTE_FUNCTION_NAME = "mint"; +const EXECUTE2_FUNCTION_NAME = "mint2"; +const EXECUTE3_FUNCTION_NAME = "readableRevert"; +const CALL_FUNCTION_NAME = "getBalance"; + + + + + +var DEPLOYED_CONTRACT_ADDRESS_LOWER_CASE: string = ""; +var globalCallCount = 0; + +async function waitUntilNextBlock() { + + const current = await hre.ethers.provider.getBlockNumber(); + let newBlock = current; + console.log(`BLOCK_NUMBER ${current}`); + + while (newBlock == current) { + newBlock = await hre.ethers.provider.getBlockNumber(); + } + + console.log(`BLOCK_NUMBER ${newBlock}`); + + return current; + +} + +function CHECK(result: any): void { + if (!result) { + const message: string = `Check failed ${result}` + console.log(message); + throw message; + } + + +} + + + + +async function deployTestContract(): Promise { + + console.log(`Deploying ` + TEST_CONTRACT_NAME); + + const factory = await ethers.getContractFactory(TEST_CONTRACT_NAME); + const testContractName = await factory.deploy({ + gasLimit: 2100000, // this is just an example value; you'll need to set an appropriate gas limit for your specific function call + }); + const deployedTestContract = await testContractName.deployed(); + + const deployReceipt = await ethers.provider.getTransactionReceipt(deployedTestContract.deployTransaction.hash) + const deployBlockNumber: number = deployReceipt.blockNumber; + + const hash = deployedTestContract.deployTransaction.hash; + console.log(`Contract deployed to ${deployedTestContract.address} at block ${deployBlockNumber.toString(16)} tx hash ${hash}`); + + const tracer = await factory.attach(deployedTestContract.address); + let result = await tracer.callStatic.mint2(1000); + + console.log("Got result"); + + console.log(result); + + return deployedTestContract; + +} + + +function generateNewWallet() { + const wallet = hre.ethers.Wallet.createRandom(); + console.log("Address:", wallet.address); + return wallet; +} + +function sleep(ms: number) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + + +async function sendMoneyWithoutConfirmation(): Promise { + // Generate a new wallet + const newWallet = generateNewWallet(); + + await sleep(3000); // Sleep for 1000 milliseconds (1 second) + + // Get the first signer from Hardhat's local network + const [signer] = await hre.ethers.getSigners(); + + const currentNonce = await signer.getTransactionCount(); + + // Define the transaction + const tx = { + to: newWallet.address, + value: hre.ethers.utils.parseEther("0.1"), + nonce: currentNonce + }; + + // Send the transaction and wait until it is submitted ot the queue + const txResponse = signer.sendTransaction(tx); + + if (hre.network.name == "geth") { + await txResponse; + } + + console.log(`Submitted a tx to send 0.1 ETH to ${newWallet.address}`); + + return currentNonce; +} + +async function sendTransferWithConfirmation(): Promise { + // Generate a new wallet + const newWallet = generateNewWallet(); + + await sleep(3000); // Sleep for 1000 milliseconds (1 second) + + // Get the first signer from Hardhat's local network + const [signer] = await hre.ethers.getSigners(); + + const currentNonce = await signer.getTransactionCount(); + + // Define the transaction + const tx = { + to: "0x388C818CA8B9251b393131C08a736A67ccB19297", + value: hre.ethers.utils.parseEther("0.1"), + }; + + // Send the transaction and wait until it is submitted ot the queue + const txResponse = await signer.sendTransaction(tx); + const txReceipt = await txResponse.wait(); + + console.log(`Submitted a tx to send 0.1 ETH to ${newWallet.address}`); + + return txReceipt.transactionHash!; +} + + +async function executeTransferAndThenTestContractMintInSingleBlock(deployedContract: any): Promise { + + let currentNonce: int = await sendMoneyWithoutConfirmation(); + + const mintReceipt = await deployedContract[EXECUTE_FUNCTION_NAME](1000, { + gasLimit: 2100000, // this is just an example value; you'll need to set an appropriate gas limit for your specific function call + nonce: currentNonce + 1, + }); + + expect(mintReceipt.blockNumber).not.to.be.null; + + + return mintReceipt.hash!; + +} + +async function executeMintCall(deployedContract: any): Promise { + + const result = await deployedContract.mint2(1000); + + console.log("Executed mint2 call"); + +} + + +async function executeRevert(deployedContract: any): Promise { + + const revertReceipt = await deployedContract[EXECUTE3_FUNCTION_NAME](1000, { + gasLimit: 2100000, // this is just an example value; you'll need to set an appropriate gas limit for your specific function call, + }); + + expect(revertReceipt.blockNumber).not.to.be.null; + + + return revertReceipt.hash!; + +} + +async function main(): Promise { + + let deployedContract = await deployTestContract(); + + + + + + DEPLOYED_CONTRACT_ADDRESS_LOWER_CASE = deployedContract.address.toString().toLowerCase(); + + + + while (true) { + + const firstMintHash: string = await executeTransferAndThenTestContractMintInSingleBlock(deployedContract); + + const secondTransferHash: string = await sendTransferWithConfirmation(); + + + const secondMintHash: string = await executeMintCall(deployedContract); + + + const revertHash: string = await executeRevert(deployedContract); + } + +} + + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error: any) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/test/tools/jsontests/BlockChainTests.cpp b/test/tools/jsontests/BlockChainTests.cpp index 2959da8eb..4c60a6489 100644 --- a/test/tools/jsontests/BlockChainTests.cpp +++ b/test/tools/jsontests/BlockChainTests.cpp @@ -387,13 +387,13 @@ json_spirit::mObject fillBCTest( json_spirit::mObject const& _input ) { } output["blocks"] = blArray; - output["postState"] = fillJsonWithState( testChain.topBlock().state().createStateReadOnlyCopy() ); + output["postState"] = fillJsonWithState(testChain.topBlock().state() ); output["lastblockhash"] = toHexPrefixed( testChain.topBlock().blockHeader().hash( WithSeal ) ); // make all values hex in pre section State prestate = State(); ImportTest::importState( _input.at( "pre" ).get_obj(), prestate ); - output["pre"] = fillJsonWithState( prestate.createStateReadOnlyCopy() ); + output["pre"] = fillJsonWithState(prestate ); for ( auto iterator = chainMap.begin(); iterator != chainMap.end(); iterator++ ) delete iterator->second; @@ -1018,16 +1018,14 @@ BOOST_FIXTURE_TEST_SUITE( BlockchainTests, bcTestFixture ) BOOST_AUTO_TEST_CASE( bcStateTests ) {} BOOST_AUTO_TEST_CASE( bcBlockGasLimitTest ) {} BOOST_AUTO_TEST_CASE( bcGasPricerTest ) {} -BOOST_AUTO_TEST_CASE( bcInvalidHeaderTest ) {} BOOST_AUTO_TEST_CASE( bcUncleHeaderValidity ) {} -BOOST_AUTO_TEST_CASE( bcUncleTest ) {} +// Commenting this out as we do not support this BOOST_AUTO_TEST_CASE( bcValidBlockTest ) {} BOOST_AUTO_TEST_CASE( bcWalletTest, *boost::unit_test::precondition( dev::test::run_not_express ) ) {} BOOST_AUTO_TEST_CASE( bcForgedTest, *boost::unit_test::precondition( dev::test::run_not_express ) ) {} BOOST_AUTO_TEST_CASE( bcRandomBlockhashTest ) {} -BOOST_AUTO_TEST_CASE( bcExploitTest ) {} BOOST_AUTO_TEST_SUITE_END() diff --git a/test/tools/libtesteth/BlockChainHelper.cpp b/test/tools/libtesteth/BlockChainHelper.cpp index 53b3ce334..3098b54e1 100644 --- a/test/tools/libtesteth/BlockChainHelper.cpp +++ b/test/tools/libtesteth/BlockChainHelper.cpp @@ -99,7 +99,7 @@ void TestBlock::initBlockFromJsonHeader( mObject const& _blockHeader, mObject co m_state = std::unique_ptr< State >( new State( 0, m_tempDirState.get()->path(), h256{}, BaseState::Empty, 0, 1000000000 ) ); ImportTest::importState( _stateObj, *m_state ); - m_state->createStateModifyCopy().commit( dev::eth::CommitBehaviour::KeepEmptyAccounts ); + m_state->createStateCopyAndClearCaches().commit(dev::eth::CommitBehaviour::KeepEmptyAccounts ); json_spirit::mObject state = _stateObj; dev::test::replaceCodeInState( state ); diff --git a/test/tools/libtesteth/ImportTest.cpp b/test/tools/libtesteth/ImportTest.cpp index 0a3bf579b..9555cec56 100644 --- a/test/tools/libtesteth/ImportTest.cpp +++ b/test/tools/libtesteth/ImportTest.cpp @@ -229,12 +229,11 @@ bytes ImportTest::executeTest( bool _isFilling ) { } void ImportTest::checkBalance( State const& _pre, State const& _post, bigint _miningReward ) { - State pre = _pre.createStateReadOnlyCopy(), post = _post.createStateReadOnlyCopy(); bigint preBalance = 0; bigint postBalance = 0; - for ( auto const& addr : pre.addresses() ) + for ( auto const& addr : _pre.addresses() ) preBalance += addr.second; - for ( auto const& addr : post.addresses() ) + for ( auto const& addr : _post.addresses() ) postBalance += addr.second; // account could destroy ether if it suicides to itself @@ -250,7 +249,7 @@ std::tuple< State, ImportTest::ExecOutput, skale::ChangeLog > ImportTest::execut assert( m_envInfo ); bool removeEmptyAccounts = false; - State initialState = _preState.createStateModifyCopy(); + State initialState = _preState; initialState.addBalance( _env.author(), 0 ); // imitate mining reward ExecOutput out( std::make_pair( eth::ExecutionResult(), eth::TransactionReceipt( h256(), u256(), eth::LogEntries() ) ) ); @@ -373,7 +372,7 @@ void ImportTest::importState( validation::validateAccountMaskObj( accountMaskJson ); } std::string jsondata = json_spirit::write_string( ( json_spirit::mValue ) o, false ); - _state.createStateModifyCopy().populateFrom( jsonToAccountMap( jsondata, 0, &o_mask ) ); + _state.populateFrom(jsonToAccountMap(jsondata, 0, &o_mask ) ); } void ImportTest::importState( json_spirit::mObject const& _o, State& _state ) { @@ -491,7 +490,6 @@ void ImportTest::importTransaction( json_spirit::mObject const& o_tr ) { int ImportTest::compareStates( State const& _stateExpect, State const& _statePost, AccountMaskMap const _expectedStateOptions, WhenError _throw ) { - State stateExpect = _stateExpect.createStateReadOnlyCopy(), statePost = _statePost.createStateReadOnlyCopy(); bool wasError = false; #define CHECK( a, b ) \ { \ @@ -506,11 +504,12 @@ int ImportTest::compareStates( State const& _stateExpect, State const& _statePos } \ } - for ( auto const& a : stateExpect.addresses() ) { + for ( auto const& a : _stateExpect.addresses() ) { AccountMask addressOptions( true ); + auto accountAddress = a.first; if ( _expectedStateOptions.size() ) { try { - addressOptions = _expectedStateOptions.at( a.first ); + addressOptions = _expectedStateOptions.at( accountAddress ); } catch ( std::out_of_range const& ) { BOOST_ERROR( TestOutputHelper::get().testName() + " expectedStateOptions map does not match expectedState in " @@ -520,57 +519,64 @@ int ImportTest::compareStates( State const& _stateExpect, State const& _statePos } if ( addressOptions.shouldExist() ) { - CHECK( statePost.addressInUse( a.first ), + CHECK( _statePost.addressInUse( accountAddress ), TestOutputHelper::get().testName() + " Compare States: " - << a.first << " missing expected address!" ); + << accountAddress << " missing expected address!" ); } else { - CHECK( !statePost.addressInUse( a.first ), + CHECK( !_statePost.addressInUse( accountAddress ), TestOutputHelper::get().testName() + " Compare States: " - << a.first << " address not expected to exist!" ); + << accountAddress << " address not expected to exist!" ); } - if ( statePost.addressInUse( a.first ) ) { + if ( _statePost.addressInUse( accountAddress ) ) { if ( addressOptions.hasBalance() ) - CHECK( ( stateExpect.balance( a.first ) == statePost.balance( a.first ) ), + CHECK( ( _stateExpect.balance( accountAddress ) == _statePost.balance( accountAddress ) ), TestOutputHelper::get().testName() + " Check State: " - << a.first << ": incorrect balance " << _statePost.balance( a.first ) - << ", expected " << stateExpect.balance( a.first ) ); + << accountAddress << ": incorrect balance " << _statePost.balance( accountAddress ) + << ", expected " << _stateExpect.balance( accountAddress ) ); if ( addressOptions.hasNonce() ) - CHECK( ( stateExpect.getNonce( a.first ) == statePost.getNonce( a.first ) ), + CHECK( ( _stateExpect.getNonce( accountAddress ) == _statePost.getNonce( accountAddress ) ), TestOutputHelper::get().testName() + " Check State: " - << a.first << ": incorrect nonce " << statePost.getNonce( a.first ) - << ", expected " << stateExpect.getNonce( a.first ) ); + << accountAddress << ": incorrect nonce " << _statePost.getNonce( accountAddress ) + << ", expected " << _stateExpect.getNonce( accountAddress ) ); if ( addressOptions.hasStorage() ) { - map< h256, pair< u256, u256 > > stateStorage = statePost.storage( a.first ); - for ( auto const& s : stateExpect.storage( a.first ) ) + map< h256, pair< u256, u256 > > stateStorage = _statePost.storage( accountAddress ); + for ( auto const& s : _stateExpect.storage( accountAddress ) ) CHECK( ( stateStorage[s.first] == s.second ), TestOutputHelper::get().testName() + " Check State: " - << a.first << ": incorrect storage [" + << accountAddress << ": incorrect storage [" << toCompactHexPrefixed( s.second.first ) << "] = " << toCompactHexPrefixed( stateStorage[s.first].second ) << ", expected [" << toCompactHexPrefixed( s.second.first ) << "] = " << toCompactHexPrefixed( s.second.second ) ); // Check for unexpected storage values - map< h256, pair< u256, u256 > > expectedStorage = stateExpect.storage( a.first ); - for ( auto const& s : statePost.storage( a.first ) ) + map< h256, pair< u256, u256 > > expectedStorage = _stateExpect.storage( accountAddress ); + for ( auto const& s : _statePost.storage( accountAddress ) ) { + if (s.second.second == 0 && expectedStorage.count( s.first ) == 0 ) { + // take into account fact that storage() in skaled historically + // can return zero values of storage, which could just be omitted + // since Ethereum default value for storage is zero anyway + continue; + } CHECK( ( expectedStorage[s.first] == s.second ), TestOutputHelper::get().testName() + " Check State: " - << a.first << ": incorrect storage [" + << accountAddress << ": unexpected incorrect storage [" << toCompactHexPrefixed( s.second.first ) << "] = " << toCompactHexPrefixed( s.second.second ) << ", expected [" << toCompactHexPrefixed( s.second.first ) << "] = " << toCompactHexPrefixed( expectedStorage[s.first].second ) ); + } } if ( addressOptions.hasCode() ) - CHECK( ( stateExpect.code( a.first ) == statePost.code( a.first ) ), + CHECK( ( _stateExpect.code( accountAddress ) == _statePost.code( accountAddress) ), TestOutputHelper::get().testName() + " Check State: " - << a.first << ": incorrect code '" - << toHexPrefixed( statePost.code( a.first ) ) << "', expected '" - << toHexPrefixed( stateExpect.code( a.first ) ) << "'" ); + << accountAddress << ": incorrect code '" + << toHexPrefixed( _statePost.code( accountAddress ) ) << "', expected '" + << toHexPrefixed( _stateExpect.code( accountAddress ) ) << "'" ); } } diff --git a/test/tools/libtesteth/TestHelper.cpp b/test/tools/libtesteth/TestHelper.cpp index 9e8918e51..76a04fb93 100644 --- a/test/tools/libtesteth/TestHelper.cpp +++ b/test/tools/libtesteth/TestHelper.cpp @@ -114,13 +114,14 @@ void mine( BlockHeader& _bi, SealEngineFace* _sealer, bool _verify ) { void simulateMining( Client& client, size_t numBlocks, const dev::Address &address ) { const auto balanceBefore = client.balanceAt( address ); - State state = client.state().createStateModifyCopy(); + State state = client.state(); u256 reward = 0; for ( size_t blockNumber = 0; blockNumber < numBlocks; ++blockNumber ) { reward += client.sealEngine()->blockReward( 1, blockNumber ); } state.addBalance( address, reward ); state.commit(); + state.getOriginalDb()->createBlockSnap(1); const auto balanceAfter = client.balanceAt( address ); balanceAfter > balanceBefore; // make compiler happy assert( balanceAfter > balanceBefore ); diff --git a/test/tools/libtesteth/TestOutputHelper.h b/test/tools/libtesteth/TestOutputHelper.h index 9ef695fa2..1715df1cc 100644 --- a/test/tools/libtesteth/TestOutputHelper.h +++ b/test/tools/libtesteth/TestOutputHelper.h @@ -71,5 +71,6 @@ class TestOutputHelperFixture { virtual ~TestOutputHelperFixture(); }; + } // namespace test } // namespace dev diff --git a/test/tools/libtestutils/FixedClient.h b/test/tools/libtestutils/FixedClient.h index d4b00016a..354789c4b 100644 --- a/test/tools/libtestutils/FixedClient.h +++ b/test/tools/libtestutils/FixedClient.h @@ -69,7 +69,7 @@ class FixedClient : public dev::eth::ClientBase { h256 submitTransaction( eth::TransactionSkeleton const&, Secret const& ) override { return {}; }; - h256 importTransaction( eth::Transaction const& ) override { return {}; } + h256 importTransaction( eth::Transaction const&, dev::eth::TransactionBroadcast ) override { return {}; } eth::ExecutionResult call( Address const&, u256, Address, bytes const&, u256, u256, #ifdef HISTORIC_STATE @@ -102,5 +102,7 @@ eth::FudgeFactor ) override { mutable SharedMutex x_stateDB; ///< Lock on the state DB, effectively a lock on m_postSeal. }; + + } // namespace test } // namespace dev diff --git a/test/unittests/libethereum/ClientTest.cpp b/test/unittests/libethereum/ClientTest.cpp index dba0d1122..901e60543 100644 --- a/test/unittests/libethereum/ClientTest.cpp +++ b/test/unittests/libethereum/ClientTest.cpp @@ -201,16 +201,13 @@ class TestClientFixture : public TestOutputHelperFixture { clog( VerbosityInfo, "TestClientFixture::getTransactionStatus()" ) << ( cc::success( "SUCCESS: Got positive transaction status" ) ); else - clog( VerbosityError, "TestClientFixture::getTransactionStatus()" ) << - ( cc::fatal( "ERROR:" ) + " " + cc::error( "Got negative transaction status" ) ); + cerr << "TestClientFixture::getTransactionStatus() ERROR:" << receipt["status"] << endl; return bStatusFlag; } catch ( std::exception & ex ) { - clog( VerbosityError, "TestClientFixture::getTransactionStatus()" ) << - ( cc::fatal( "ERROR:" ) + " " + cc::error( "exception:" ) + cc::warn( ex.what() ) ); + cerr << "TestClientFixture::getTransactionStatus() ERROR:" << ex.what() << endl; return false; } catch (...) { - clog( VerbosityError, "TestClientFixture::getTransactionStatus()" ) << - ( cc::fatal( "ERROR:" ) + " " + cc::error( "unknown exception" ) ); + cerr << "TestClientFixture::getTransactionStatus() Unknown exception" << endl; return false; } } @@ -635,10 +632,10 @@ BOOST_AUTO_TEST_CASE( consumptionWithRefunds ) { // function setA(uint x) public { // a[x] = true; // a[x] = false; - // } // } Address from = fixture.coinbase.address(); + // } Address contractAddress( "0xD2001300000000000000000000000000000000D3" ); // data to call method setA(0) @@ -646,11 +643,17 @@ BOOST_AUTO_TEST_CASE( consumptionWithRefunds ) { jsToBytes( "0xee919d500000000000000000000000000000000000000000000000000000000000000000" ); int64_t maxGas = 100000; + + u256 balance = testClient->balanceAt( from ); + BOOST_CHECK( balance > 0 ); + u256 estimate = testClient ->estimateGas( from, 0, contractAddress, data, maxGas, 1000000, GasEstimationCallback() ) .first; + + Json::Value estimateTransaction; estimateTransaction["from"] = toJS(from ); estimateTransaction["to"] = toJS (contractAddress); @@ -658,6 +661,7 @@ BOOST_AUTO_TEST_CASE( consumptionWithRefunds ) { estimateTransaction["gas"] = toJS(estimate - 1); BOOST_CHECK( !fixture.getTransactionStatus(estimateTransaction) ); + fixture.ethereum()->state().getOriginalDb()->createBlockSnap( 2 ); estimateTransaction["gas"] = toJS(estimate); BOOST_CHECK( fixture.getTransactionStatus(estimateTransaction) ); @@ -691,6 +695,10 @@ BOOST_AUTO_TEST_CASE( consumptionWithRefunds2 ) { // } Address from = fixture.coinbase.address(); + + u256 balance = testClient->balanceAt( from ); + BOOST_CHECK( balance > 0 ); + Address contractAddress( "0xD40b89C063a23eb85d739f6fA9B14341838eeB2b" ); // setA(3) already "called" (see "storage" in c_genesisInfoSkaleTest) @@ -711,6 +719,7 @@ BOOST_AUTO_TEST_CASE( consumptionWithRefunds2 ) { estimateTransaction["gas"] = toJS(estimate - 1); BOOST_CHECK( !fixture.getTransactionStatus(estimateTransaction) ); + fixture.ethereum()->state().getOriginalDb()->createBlockSnap( 2 ); estimateTransaction["gas"] = toJS(estimate); BOOST_CHECK( fixture.getTransactionStatus(estimateTransaction) ); @@ -957,8 +966,6 @@ BOOST_AUTO_TEST_CASE( initAndUpdateHistoricConfigFields ) { BOOST_REQUIRE( testClient->getHistoricNodeId( 0 ) == "26" ); BOOST_REQUIRE( testClient->getHistoricNodeIndex( 0 ) == "3" ); - BOOST_REQUIRE( testClient->mineBlocks( 1 ) ); - testClient->importTransactionsAsBlock( Transactions(), 1000, 4294967294 ); std::array< std::string, 4 > imaBLSPublicKeyAfterBlock = { "10860211539819517237363395256510340030868592687836950245163587507107792195621", "2419969454136313127863904023626922181546178935031521540751337209075607503568", "3399776985251727272800732947224655319335094876742988846345707000254666193993", "16982202412630419037827505223148517434545454619191931299977913428346639096984" }; diff --git a/test/unittests/libethereum/SkaleHost.cpp b/test/unittests/libethereum/SkaleHost.cpp index 2091839dd..e799ea5eb 100644 --- a/test/unittests/libethereum/SkaleHost.cpp +++ b/test/unittests/libethereum/SkaleHost.cpp @@ -12,17 +12,17 @@ #include #include #include +#include #include #include -#include #include #include -#include -#include #include +#include +#include #include @@ -44,13 +44,13 @@ class ConsensusTestStub : public ConsensusInterface { block_gas_prices.push_back( 1000 ); } ~ConsensusTestStub() override {} - void parseFullConfigAndCreateNode( const std::string& /*_jsonConfig */, - const string& /*_gethURL*/ ) override {} + void parseFullConfigAndCreateNode( + const std::string& /*_jsonConfig */, const string& /*_gethURL*/ ) override {} void startAll() override {} void bootStrapAll() override {} void exitGracefully() override { need_exit = true; } consensus_engine_status getStatus() const override { - return need_exit? CONSENSUS_EXITED : CONSENSUS_ACTIVE; + return need_exit ? CONSENSUS_EXITED : CONSENSUS_ACTIVE; } void stop() {} @@ -59,9 +59,10 @@ class ConsensusTestStub : public ConsensusInterface { return m_extFace.pendingTransactions( _limit, stateRoot ); } void createBlock( const ConsensusExtFace::transactions_vector& _approvedTransactions, - uint64_t _timeStamp, uint64_t _blockID, u256 _gasPrice = 0, u256 _stateRoot = 0, uint64_t _winningNodeIndex = -1 ) { - m_extFace.createBlock( - _approvedTransactions, _timeStamp, 0, _blockID, _gasPrice, _stateRoot, _winningNodeIndex ); + uint64_t _timeStamp, uint64_t _blockID, u256 _gasPrice = 0, u256 _stateRoot = 0, + uint64_t _winningNodeIndex = -1 ) { + m_extFace.createBlock( _approvedTransactions, _timeStamp, 0, _blockID, _gasPrice, + _stateRoot, _winningNodeIndex ); setPriceForBlockId( _blockID, _gasPrice ); } @@ -70,9 +71,7 @@ class ConsensusTestStub : public ConsensusInterface { return block_gas_prices.at( _blockId ); } - u256 getRandomForBlockId( uint64_t _blockId ) const override { - return 0; - } + u256 getRandomForBlockId( uint64_t _blockId ) const override { return 0; } u256 setPriceForBlockId( uint64_t _blockId, u256 _gasPrice ) { assert( _blockId <= block_gas_prices.size() ); @@ -83,13 +82,16 @@ class ConsensusTestStub : public ConsensusInterface { return 0; } - uint64_t submitOracleRequest( const string& /*_spec*/, string& - /*_receipt*/, string& /*error*/) override { + uint64_t submitOracleRequest( const string& /*_spec*/, + string& + /*_receipt*/, + string& /*error*/ ) override { return 0; } uint64_t checkOracleResult( const string& - /*_receipt*/, string& /*_result */) override { + /*_receipt*/, + string& /*_result */ ) override { return 0; } @@ -100,7 +102,6 @@ class ConsensusTestStub : public ConsensusInterface { virtual ConsensusInterface::SyncInfo getSyncInfo() override { return ConsensusInterface::SyncInfo{}; }; - }; class ConsensusTestStubFactory : public ConsensusFactory { @@ -115,7 +116,8 @@ class ConsensusTestStubFactory : public ConsensusFactory { // TODO Do not copy&paste from JsonRpcFixture struct SkaleHostFixture : public TestOutputHelperFixture { - SkaleHostFixture( const std::map& params = std::map() ) { + SkaleHostFixture( const std::map< std::string, std::string >& params = + std::map< std::string, std::string >() ) { dev::p2p::NetworkPreferences nprefs; ChainParams chainParams; @@ -128,7 +130,7 @@ struct SkaleHostFixture : public TestOutputHelperFixture { // so that tests can be run in parallel // TODO: better make it use ethemeral in-memory databases chainParams.extraData = h256::random().asBytes(); - chainParams.sChain.nodeGroups = { { {}, uint64_t(-1), {"0", "0", "1", "0"} } }; + chainParams.sChain.nodeGroups = { { {}, uint64_t( -1 ), { "0", "0", "1", "0" } } }; chainParams.nodeInfo.port = chainParams.nodeInfo.port6 = rand_port; chainParams.nodeInfo.testSignatures = true; chainParams.sChain.nodes[0].port = chainParams.sChain.nodes[0].port6 = rand_port; @@ -136,18 +138,21 @@ struct SkaleHostFixture : public TestOutputHelperFixture { // not 0-timestamp genesis - to test patch chainParams.timestamp = std::time( NULL ) - 5; - if( params.count("multiTransactionMode") && stoi( params.at( "multiTransactionMode" ) ) ) + if ( params.count( "multiTransactionMode" ) && stoi( params.at( "multiTransactionMode" ) ) ) chainParams.sChain.multiTransactionMode = true; - if( params.count("skipInvalidTransactionsPatchTimestamp") && stoi( params.at( "skipInvalidTransactionsPatchTimestamp" ) ) ) - chainParams.sChain._patchTimestamps[static_cast(SchainPatchEnum::SkipInvalidTransactionsPatch)] = stoi( params.at( "skipInvalidTransactionsPatchTimestamp" ) ); + if ( params.count( "skipInvalidTransactionsPatchTimestamp" ) && + stoi( params.at( "skipInvalidTransactionsPatchTimestamp" ) ) ) + chainParams.sChain._patchTimestamps[static_cast< size_t >( + SchainPatchEnum::SkipInvalidTransactionsPatch )] = + stoi( params.at( "skipInvalidTransactionsPatchTimestamp" ) ); accountHolder.reset( new FixedAccountHolder( [&]() { return client.get(); }, {} ) ); - accountHolder->setAccounts( {coinbase, account2} ); + accountHolder->setAccounts( { coinbase, account2 } ); gasPricer = make_shared< eth::TrivialGasPricer >( 0, DefaultGasPrice ); - auto monitor = make_shared< InstanceMonitor >("test"); + auto monitor = make_shared< InstanceMonitor >( "test" ); - setenv("DATA_DIR", tempDir.path().c_str(), 1); + setenv( "DATA_DIR", tempDir.path().c_str(), 1 ); client = make_unique< Client >( chainParams, chainParams.networkID, gasPricer, nullptr, monitor, tempDir.path() ); this->tq = client->debugGetTransactionQueue(); @@ -185,11 +190,11 @@ struct SkaleHostFixture : public TestOutputHelperFixture { TransactionQueue* tq; - TransientDirectory tempDir; // ! should exist before client! + TransientDirectory tempDir; // ! should exist before client! unique_ptr< Client > client; - dev::KeyPair coinbase{KeyPair::create()}; - dev::KeyPair account2{KeyPair::create()}; + dev::KeyPair coinbase{ KeyPair::create() }; + dev::KeyPair account2{ KeyPair::create() }; unique_ptr< FixedAccountHolder > accountHolder; std::shared_ptr< eth::TrivialGasPricer > gasPricer; @@ -199,9 +204,11 @@ struct SkaleHostFixture : public TestOutputHelperFixture { #define CHECK_BLOCK_BEGIN auto blockBefore = client->number() -#define REQUIRE_BLOCK_INCREASE( increase ) \ - { auto blockAfter = client->number(); \ - BOOST_REQUIRE_EQUAL( blockAfter - blockBefore, increase ); } +#define REQUIRE_BLOCK_INCREASE( increase ) \ + { \ + auto blockAfter = client->number(); \ + BOOST_REQUIRE_EQUAL( blockAfter - blockBefore, increase ); \ + } #define REQUIRE_BLOCK_SIZE( number, s ) \ { \ @@ -219,27 +226,35 @@ struct SkaleHostFixture : public TestOutputHelperFixture { #define CHECK_NONCE_BEGIN( senderAddress ) u256 nonceBefore = client->countAt( senderAddress ) -#define REQUIRE_NONCE_INCREASE( senderAddress, increase ) \ - { u256 nonceAfter = client->countAt( senderAddress ); \ - BOOST_REQUIRE_EQUAL( nonceAfter - nonceBefore, increase ); } +#define REQUIRE_NONCE_INCREASE( senderAddress, increase ) \ + { \ + u256 nonceAfter = client->countAt( senderAddress ); \ + BOOST_REQUIRE_EQUAL( nonceAfter - nonceBefore, increase ); \ + } #define CHECK_BALANCE_BEGIN( senderAddress ) u256 balanceBefore = client->balanceAt( senderAddress ) -#define REQUIRE_BALANCE_DECREASE( senderAddress, decrease ) \ - { u256 balanceAfter = client->balanceAt( senderAddress ); \ - BOOST_REQUIRE_EQUAL( balanceBefore - balanceAfter, decrease ); } +#define REQUIRE_BALANCE_DECREASE( senderAddress, decrease ) \ + { \ + u256 balanceAfter = client->balanceAt( senderAddress ); \ + BOOST_REQUIRE_EQUAL( balanceBefore - balanceAfter, decrease ); \ + } -#define REQUIRE_BALANCE_DECREASE_GE( senderAddress, decrease ) \ - { u256 balanceAfter = client->balanceAt( senderAddress ); \ - BOOST_REQUIRE_GE( balanceBefore - balanceAfter, decrease ); } +#define REQUIRE_BALANCE_DECREASE_GE( senderAddress, decrease ) \ + { \ + u256 balanceAfter = client->balanceAt( senderAddress ); \ + BOOST_REQUIRE_GE( balanceBefore - balanceAfter, decrease ); \ + } BOOST_AUTO_TEST_SUITE( SkaleHostSuite ) //, *boost::unit_test::disabled() ) -auto skipInvalidTransactionsVariants = boost::unit_test::data::make({false, true}); - -BOOST_DATA_TEST_CASE( validTransaction, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag ) { +auto skipInvalidTransactionsVariants = boost::unit_test::data::make( { false, true } ); - SkaleHostFixture fixture( std::map( {{"skipInvalidTransactionsPatchTimestamp", to_string(int(skipInvalidTransactionsFlag))}} ) ); +BOOST_DATA_TEST_CASE( + validTransaction, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag ) { + SkaleHostFixture fixture( + std::map< std::string, std::string >( { { "skipInvalidTransactionsPatchTimestamp", + to_string( int( skipInvalidTransactionsFlag ) ) } } ) ); auto& client = fixture.client; auto& coinbase = fixture.coinbase; auto& accountHolder = fixture.accountHolder; @@ -268,7 +283,7 @@ BOOST_DATA_TEST_CASE( validTransaction, skipInvalidTransactionsVariants, skipInv CHECK_BLOCK_BEGIN; BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{tx.toBytes()}, utcTime(), 1U ) ); + stub->createBlock( ConsensusExtFace::transactions_vector{ tx.toBytes() }, utcTime(), 1U ) ); REQUIRE_BLOCK_INCREASE( 1 ); REQUIRE_BLOCK_SIZE( 1, 1 ); @@ -278,16 +293,16 @@ BOOST_DATA_TEST_CASE( validTransaction, skipInvalidTransactionsVariants, skipInv REQUIRE_BALANCE_DECREASE( senderAddress, value + gasPrice * 21000 ); } -// Transaction should be IGNORED or EXCLUDED during execution (depending on skipInvalidTransactionsFlag) -// Proposer should be penalized -// 1 Small amount of random bytes -// 2 110 random bytes -// 3 110 bytes of semi-correct RLP -BOOST_DATA_TEST_CASE( transactionRlpBad, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag - // , *boost::unit_test::precondition( dev::test::run_not_express ) - ) { - - SkaleHostFixture fixture( std::map( {{"skipInvalidTransactionsPatchTimestamp", to_string(int(skipInvalidTransactionsFlag))}} ) ); +// Transaction should be IGNORED or EXCLUDED during execution (depending on +// skipInvalidTransactionsFlag) Proposer should be penalized 1 Small amount of random bytes 2 110 +// random bytes 3 110 bytes of semi-correct RLP +BOOST_DATA_TEST_CASE( + transactionRlpBad, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag + // , *boost::unit_test::precondition( dev::test::run_not_express ) +) { + SkaleHostFixture fixture( + std::map< std::string, std::string >( { { "skipInvalidTransactionsPatchTimestamp", + to_string( int( skipInvalidTransactionsFlag ) ) } } ) ); auto& client = fixture.client; auto& coinbase = fixture.coinbase; auto& stub = fixture.stub; @@ -310,15 +325,14 @@ BOOST_DATA_TEST_CASE( transactionRlpBad, skipInvalidTransactionsVariants, skipIn CHECK_BLOCK_BEGIN; BOOST_REQUIRE_NO_THROW( stub->createBlock( - ConsensusExtFace::transactions_vector{small_tx1, small_tx2, bad_tx1, bad_tx2}, utcTime(), + ConsensusExtFace::transactions_vector{ small_tx1, small_tx2, bad_tx1, bad_tx2 }, utcTime(), 1U ) ); REQUIRE_BLOCK_INCREASE( 1 ); - if(skipInvalidTransactionsFlag){ + if ( skipInvalidTransactionsFlag ) { REQUIRE_BLOCK_SIZE( 1, 0 ); - } - else{ + } else { REQUIRE_BLOCK_SIZE( 1, 3 ); } @@ -329,7 +343,7 @@ BOOST_DATA_TEST_CASE( transactionRlpBad, skipInvalidTransactionsVariants, skipIn Transactions txns = client->transactions( 1 ); // cerr << toJson( txns ); - if(!skipInvalidTransactionsFlag){ + if ( !skipInvalidTransactionsFlag ) { REQUIRE_BLOCK_TRANSACTION( 1, 0, txns[0].sha3() ); REQUIRE_BLOCK_TRANSACTION( 1, 1, txns[1].sha3() ); REQUIRE_BLOCK_TRANSACTION( 1, 2, txns[2].sha3() ); @@ -369,11 +383,13 @@ class VrsHackedTransaction : public Transaction { // Transaction should be IGNORED during execution or absent if skipInvalidTransactionsFlag // Proposer should be penalized // zero signature -BOOST_DATA_TEST_CASE( transactionSigZero, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag - // , *boost::unit_test::precondition( dev::test::run_not_express ) - ) { - - SkaleHostFixture fixture( std::map( {{"skipInvalidTransactionsPatchTimestamp", to_string(int(skipInvalidTransactionsFlag))}} ) ); +BOOST_DATA_TEST_CASE( + transactionSigZero, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag + // , *boost::unit_test::precondition( dev::test::run_not_express ) +) { + SkaleHostFixture fixture( + std::map< std::string, std::string >( { { "skipInvalidTransactionsPatchTimestamp", + to_string( int( skipInvalidTransactionsFlag ) ) } } ) ); auto& client = fixture.client; auto& coinbase = fixture.coinbase; auto& accountHolder = fixture.accountHolder; @@ -402,14 +418,13 @@ BOOST_DATA_TEST_CASE( transactionSigZero, skipInvalidTransactionsVariants, skipI CHECK_BLOCK_BEGIN; BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{tx.toBytes()}, utcTime(), 1U ) ); + stub->createBlock( ConsensusExtFace::transactions_vector{ tx.toBytes() }, utcTime(), 1U ) ); REQUIRE_BLOCK_INCREASE( 1 ); - if(skipInvalidTransactionsFlag){ + if ( skipInvalidTransactionsFlag ) { REQUIRE_BLOCK_SIZE( 1, 0 ); - } - else { + } else { REQUIRE_BLOCK_SIZE( 1, 1 ); h256 txHash = sha3( tx.toBytes() ); REQUIRE_BLOCK_TRANSACTION( 1, 0, txHash ); @@ -422,11 +437,13 @@ BOOST_DATA_TEST_CASE( transactionSigZero, skipInvalidTransactionsVariants, skipI // Transaction should be IGNORED during execution or absent if skipInvalidTransactionsFlag // Proposer should be penalized // corrupted signature -BOOST_DATA_TEST_CASE( transactionSigBad, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag - // , *boost::unit_test::precondition( dev::test::run_not_express ) - ) { - - SkaleHostFixture fixture( std::map( {{"skipInvalidTransactionsPatchTimestamp", to_string(int(skipInvalidTransactionsFlag))}} ) ); +BOOST_DATA_TEST_CASE( + transactionSigBad, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag + // , *boost::unit_test::precondition( dev::test::run_not_express ) +) { + SkaleHostFixture fixture( + std::map< std::string, std::string >( { { "skipInvalidTransactionsPatchTimestamp", + to_string( int( skipInvalidTransactionsFlag ) ) } } ) ); auto& client = fixture.client; auto& coinbase = fixture.coinbase; auto& accountHolder = fixture.accountHolder; @@ -455,15 +472,14 @@ BOOST_DATA_TEST_CASE( transactionSigBad, skipInvalidTransactionsVariants, skipIn CHECK_BLOCK_BEGIN; BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{data}, utcTime(), 1U ) ); + stub->createBlock( ConsensusExtFace::transactions_vector{ data }, utcTime(), 1U ) ); REQUIRE_BLOCK_INCREASE( 1 ); - if(skipInvalidTransactionsFlag){ + if ( skipInvalidTransactionsFlag ) { REQUIRE_BLOCK_SIZE( 1, 0 ); - } - else { + } else { REQUIRE_BLOCK_SIZE( 1, 1 ); h256 txHash = sha3( data ); REQUIRE_BLOCK_TRANSACTION( 1, 0, txHash ); @@ -476,11 +492,13 @@ BOOST_DATA_TEST_CASE( transactionSigBad, skipInvalidTransactionsVariants, skipIn // Transaction should be IGNORED during execution or absent if skipInvalidTransactionsFlag // Proposer should be penalized // gas < min_gas -BOOST_DATA_TEST_CASE( transactionGasIncorrect, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag - // , *boost::unit_test::precondition( dev::test::run_not_express ) - ) { - - SkaleHostFixture fixture( std::map( {{"skipInvalidTransactionsPatchTimestamp", to_string(int(skipInvalidTransactionsFlag))}} ) ); +BOOST_DATA_TEST_CASE( + transactionGasIncorrect, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag + // , *boost::unit_test::precondition( dev::test::run_not_express ) +) { + SkaleHostFixture fixture( + std::map< std::string, std::string >( { { "skipInvalidTransactionsPatchTimestamp", + to_string( int( skipInvalidTransactionsFlag ) ) } } ) ); auto& client = fixture.client; auto& coinbase = fixture.coinbase; auto& accountHolder = fixture.accountHolder; @@ -507,14 +525,13 @@ BOOST_DATA_TEST_CASE( transactionGasIncorrect, skipInvalidTransactionsVariants, CHECK_BLOCK_BEGIN; BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{tx.toBytes()}, utcTime(), 1U ) ); + stub->createBlock( ConsensusExtFace::transactions_vector{ tx.toBytes() }, utcTime(), 1U ) ); REQUIRE_BLOCK_INCREASE( 1 ); - if(skipInvalidTransactionsFlag){ + if ( skipInvalidTransactionsFlag ) { REQUIRE_BLOCK_SIZE( 1, 0 ); - } - else { + } else { REQUIRE_BLOCK_SIZE( 1, 1 ); REQUIRE_BLOCK_TRANSACTION( 1, 0, txHash ); } @@ -527,11 +544,13 @@ BOOST_DATA_TEST_CASE( transactionGasIncorrect, skipInvalidTransactionsVariants, // Sender should be charged for gas consumed // Proposer should NOT be penalized // transaction exceedes it's gas limit -BOOST_DATA_TEST_CASE( transactionGasNotEnough, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag - // , *boost::unit_test::precondition( dev::test::run_not_express ) - ) { - - SkaleHostFixture fixture( std::map( {{"skipInvalidTransactionsPatchTimestamp", to_string(int(skipInvalidTransactionsFlag))}} ) ); +BOOST_DATA_TEST_CASE( + transactionGasNotEnough, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag + // , *boost::unit_test::precondition( dev::test::run_not_express ) +) { + SkaleHostFixture fixture( + std::map< std::string, std::string >( { { "skipInvalidTransactionsPatchTimestamp", + to_string( int( skipInvalidTransactionsFlag ) ) } } ) ); auto& client = fixture.client; auto& coinbase = fixture.coinbase; auto& accountHolder = fixture.accountHolder; @@ -574,7 +593,7 @@ BOOST_DATA_TEST_CASE( transactionGasNotEnough, skipInvalidTransactionsVariants, CHECK_BLOCK_BEGIN; BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{tx.toBytes()}, utcTime(), 1U ) ); + stub->createBlock( ConsensusExtFace::transactions_vector{ tx.toBytes() }, utcTime(), 1U ) ); REQUIRE_BLOCK_INCREASE( 1 ); REQUIRE_BLOCK_SIZE( 1, 1 ); @@ -588,9 +607,11 @@ BOOST_DATA_TEST_CASE( transactionGasNotEnough, skipInvalidTransactionsVariants, // Transaction should be IGNORED during execution or absent if skipInvalidTransactionsFlag // Proposer should be penalized // nonce too big -BOOST_DATA_TEST_CASE( transactionNonceBig, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag ) { - - SkaleHostFixture fixture( std::map( {{"skipInvalidTransactionsPatchTimestamp", to_string(int(skipInvalidTransactionsFlag))}} ) ); +BOOST_DATA_TEST_CASE( + transactionNonceBig, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag ) { + SkaleHostFixture fixture( + std::map< std::string, std::string >( { { "skipInvalidTransactionsPatchTimestamp", + to_string( int( skipInvalidTransactionsFlag ) ) } } ) ); auto& client = fixture.client; auto& coinbase = fixture.coinbase; auto& accountHolder = fixture.accountHolder; @@ -617,14 +638,13 @@ BOOST_DATA_TEST_CASE( transactionNonceBig, skipInvalidTransactionsVariants, skip CHECK_BLOCK_BEGIN; BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{tx.toBytes()}, utcTime(), 1U ) ); + stub->createBlock( ConsensusExtFace::transactions_vector{ tx.toBytes() }, utcTime(), 1U ) ); REQUIRE_BLOCK_INCREASE( 1 ); - if(skipInvalidTransactionsFlag){ + if ( skipInvalidTransactionsFlag ) { REQUIRE_BLOCK_SIZE( 1, 0 ); - } - else { + } else { REQUIRE_BLOCK_SIZE( 1, 1 ); REQUIRE_BLOCK_TRANSACTION( 1, 0, txHash ); } @@ -636,11 +656,13 @@ BOOST_DATA_TEST_CASE( transactionNonceBig, skipInvalidTransactionsVariants, skip // Transaction should be IGNORED during execution or absent if skipInvalidTransactionsFlag // Proposer should be penalized // nonce too small -BOOST_DATA_TEST_CASE( transactionNonceSmall, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag - //, *boost::unit_test::precondition( dev::test::run_not_express ) - ) { - - SkaleHostFixture fixture( std::map( {{"skipInvalidTransactionsPatchTimestamp", to_string(int(skipInvalidTransactionsFlag))}} ) ); +BOOST_DATA_TEST_CASE( + transactionNonceSmall, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag + //, *boost::unit_test::precondition( dev::test::run_not_express ) +) { + SkaleHostFixture fixture( + std::map< std::string, std::string >( { { "skipInvalidTransactionsPatchTimestamp", + to_string( int( skipInvalidTransactionsFlag ) ) } } ) ); auto& client = fixture.client; auto& coinbase = fixture.coinbase; auto& accountHolder = fixture.accountHolder; @@ -661,8 +683,8 @@ BOOST_DATA_TEST_CASE( transactionNonceSmall, skipInvalidTransactionsVariants, sk Transaction tx1( ts, ar.second ); // create 1 txns in 1 block - BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{tx1.toBytes()}, utcTime(), 1U ) ); + BOOST_REQUIRE_NO_THROW( stub->createBlock( + ConsensusExtFace::transactions_vector{ tx1.toBytes() }, utcTime(), 1U ) ); // now our test txn json["value"] = jsToDecimal( toJS( 9000 * dev::eth::szabo ) ); @@ -677,15 +699,14 @@ BOOST_DATA_TEST_CASE( transactionNonceSmall, skipInvalidTransactionsVariants, sk CHECK_BALANCE_BEGIN( senderAddress ); CHECK_BLOCK_BEGIN; - BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{tx2.toBytes()}, utcTime(), 2U ) ); + BOOST_REQUIRE_NO_THROW( stub->createBlock( + ConsensusExtFace::transactions_vector{ tx2.toBytes() }, utcTime(), 2U ) ); REQUIRE_BLOCK_INCREASE( 1 ); - if(skipInvalidTransactionsFlag){ + if ( skipInvalidTransactionsFlag ) { REQUIRE_BLOCK_SIZE( 2, 0 ); - } - else { + } else { REQUIRE_BLOCK_SIZE( 2, 1 ); REQUIRE_BLOCK_TRANSACTION( 2, 0, txHash ); } @@ -697,9 +718,11 @@ BOOST_DATA_TEST_CASE( transactionNonceSmall, skipInvalidTransactionsVariants, sk // Transaction should be IGNORED during execution or absent if skipInvalidTransactionsFlag // Proposer should be penalized // not enough cash -BOOST_DATA_TEST_CASE( transactionBalanceBad, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag ) { - - SkaleHostFixture fixture( std::map( {{"skipInvalidTransactionsPatchTimestamp", to_string(int(skipInvalidTransactionsFlag))}} ) ); +BOOST_DATA_TEST_CASE( + transactionBalanceBad, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag ) { + SkaleHostFixture fixture( + std::map< std::string, std::string >( { { "skipInvalidTransactionsPatchTimestamp", + to_string( int( skipInvalidTransactionsFlag ) ) } } ) ); auto& client = fixture.client; auto& coinbase = fixture.coinbase; auto& accountHolder = fixture.accountHolder; @@ -726,14 +749,13 @@ BOOST_DATA_TEST_CASE( transactionBalanceBad, skipInvalidTransactionsVariants, sk CHECK_BLOCK_BEGIN; BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{tx.toBytes()}, utcTime(), 1U ) ); + stub->createBlock( ConsensusExtFace::transactions_vector{ tx.toBytes() }, utcTime(), 1U ) ); REQUIRE_BLOCK_INCREASE( 1 ); - if(skipInvalidTransactionsFlag){ + if ( skipInvalidTransactionsFlag ) { REQUIRE_BLOCK_SIZE( 1, 0 ); - } - else { + } else { REQUIRE_BLOCK_SIZE( 1, 1 ); REQUIRE_BLOCK_TRANSACTION( 1, 0, txHash ); } @@ -741,41 +763,44 @@ BOOST_DATA_TEST_CASE( transactionBalanceBad, skipInvalidTransactionsVariants, sk REQUIRE_NONCE_INCREASE( senderAddress, 0 ); REQUIRE_BALANCE_DECREASE( senderAddress, 0 ); - // step 2: check that receipt "moved" to another block after successfull re-execution of the same transaction + // step 2: check that receipt "moved" to another block after successfull re-execution of the + // same transaction - if(!skipInvalidTransactionsFlag){ - LocalisedTransactionReceipt r1 = client->localisedTransactionReceipt(txHash); - BOOST_REQUIRE_EQUAL(r1.blockNumber(), 1); - BOOST_REQUIRE_EQUAL(r1.gasUsed(), 0); - LocalisedTransaction lt = client->localisedTransaction(txHash); - BOOST_REQUIRE_EQUAL(lt.blockNumber(), 1); + if ( !skipInvalidTransactionsFlag ) { + LocalisedTransactionReceipt r1 = client->localisedTransactionReceipt( txHash ); + BOOST_REQUIRE_EQUAL( r1.blockNumber(), 1 ); + BOOST_REQUIRE_EQUAL( r1.gasUsed(), 0 ); + LocalisedTransaction lt = client->localisedTransaction( txHash ); + BOOST_REQUIRE_EQUAL( lt.blockNumber(), 1 ); } // make money dev::eth::simulateMining( *client, 1, senderAddress ); - stub->createBlock( ConsensusExtFace::transactions_vector{tx.toBytes()}, utcTime(), 2U ); + stub->createBlock( ConsensusExtFace::transactions_vector{ tx.toBytes() }, utcTime(), 2U ); REQUIRE_BLOCK_SIZE( 2, 1 ); REQUIRE_BLOCK_TRANSACTION( 2, 0, txHash ); REQUIRE_NONCE_INCREASE( senderAddress, 1 ); REQUIRE_BALANCE_DECREASE_GE( senderAddress, 1 ); - LocalisedTransactionReceipt r2 = client->localisedTransactionReceipt(txHash); - BOOST_REQUIRE_EQUAL(r2.blockNumber(), 2); - BOOST_REQUIRE_GE(r2.gasUsed(), 21000); - LocalisedTransaction lt = client->localisedTransaction(txHash); - BOOST_REQUIRE_EQUAL(lt.blockNumber(), 2); + LocalisedTransactionReceipt r2 = client->localisedTransactionReceipt( txHash ); + BOOST_REQUIRE_EQUAL( r2.blockNumber(), 2 ); + BOOST_REQUIRE_GE( r2.gasUsed(), 21000 ); + LocalisedTransaction lt = client->localisedTransaction( txHash ); + BOOST_REQUIRE_EQUAL( lt.blockNumber(), 2 ); } // Transaction should be IGNORED during execution or absent if skipInvalidTransactionsFlag // Proposer should be penalized // transaction goes beyond block gas limit -BOOST_DATA_TEST_CASE( transactionGasBlockLimitExceeded, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag - // , *boost::unit_test::precondition( dev::test::run_not_express ) - ) { - - SkaleHostFixture fixture( std::map( {{"skipInvalidTransactionsPatchTimestamp", to_string(int(skipInvalidTransactionsFlag))}} ) ); +BOOST_DATA_TEST_CASE( + transactionGasBlockLimitExceeded, skipInvalidTransactionsVariants, skipInvalidTransactionsFlag + // , *boost::unit_test::precondition( dev::test::run_not_express ) +) { + SkaleHostFixture fixture( + std::map< std::string, std::string >( { { "skipInvalidTransactionsPatchTimestamp", + to_string( int( skipInvalidTransactionsFlag ) ) } } ) ); auto& client = fixture.client; auto& coinbase = fixture.coinbase; auto& stub = fixture.stub; @@ -809,17 +834,16 @@ BOOST_DATA_TEST_CASE( transactionGasBlockLimitExceeded, skipInvalidTransactionsV CHECK_BLOCK_BEGIN; BOOST_REQUIRE_NO_THROW( stub->createBlock( - ConsensusExtFace::transactions_vector{tx1.toBytes(), tx2.toBytes()}, utcTime(), 1U ) ); + ConsensusExtFace::transactions_vector{ tx1.toBytes(), tx2.toBytes() }, utcTime(), 1U ) ); BOOST_REQUIRE_EQUAL( client->number(), 1 ); REQUIRE_BLOCK_INCREASE( 1 ); - if(skipInvalidTransactionsFlag){ + if ( skipInvalidTransactionsFlag ) { REQUIRE_BLOCK_SIZE( 1, 1 ); REQUIRE_BLOCK_TRANSACTION( 1, 0, txHash1 ); - } - else { + } else { REQUIRE_BLOCK_SIZE( 1, 2 ); REQUIRE_BLOCK_TRANSACTION( 1, 0, txHash1 ); @@ -832,7 +856,6 @@ BOOST_DATA_TEST_CASE( transactionGasBlockLimitExceeded, skipInvalidTransactionsV // Last transaction should be dropped from block proposal BOOST_AUTO_TEST_CASE( gasLimitInBlockProposal ) { - SkaleHostFixture fixture; auto& client = fixture.client; auto& coinbase = fixture.coinbase; @@ -842,11 +865,12 @@ BOOST_AUTO_TEST_CASE( gasLimitInBlockProposal ) { auto receiver = KeyPair::create(); - { - auto wr_state = client->state().createStateModifyCopy(); - wr_state.addBalance( fixture.account2.address(), client->chainParams().gasLimit * 1000 + dev::eth::ether ); - wr_state.commit(); - } + + auto wr_state = client->state().createStateCopyAndClearCaches(); + wr_state.addBalance( + fixture.account2.address(), client->chainParams().gasLimit * 1000 + dev::eth::ether ); + wr_state.commit(); + wr_state.getOriginalDb()->createBlockSnap(2); // 1 txn with max gas Json::Value json; @@ -859,7 +883,7 @@ BOOST_AUTO_TEST_CASE( gasLimitInBlockProposal ) { Transaction tx1 = fixture.tx_from_json( json ); // 2 txn - json["from"] = toJS( account2.address() ); + json["from"] = toJS( account2.address() ); json["gas"] = jsToDecimal( toJS( client->chainParams().gasLimit - 21000 + 1 ) ); Transaction tx2 = fixture.tx_from_json( json ); @@ -868,7 +892,7 @@ BOOST_AUTO_TEST_CASE( gasLimitInBlockProposal ) { skaleHost->receiveTransaction( toJS( tx1.toBytes() ) ); skaleHost->receiveTransaction( toJS( tx2.toBytes() ) ); - sleep( 1 ); // allow broadcast thread to move them + sleep( 1 ); // allow broadcast thread to move them ConsensusExtFace::transactions_vector proposal = stub->pendingTransactions( 100 ); @@ -878,9 +902,8 @@ BOOST_AUTO_TEST_CASE( gasLimitInBlockProposal ) { // positive test for 4 next ones BOOST_AUTO_TEST_CASE( transactionDropReceive - //, *boost::unit_test::precondition( dev::test::run_not_express ) - ) { - + //, *boost::unit_test::precondition( dev::test::run_not_express ) +) { SkaleHostFixture fixture; auto& client = fixture.client; auto& coinbase = fixture.coinbase; @@ -900,7 +923,8 @@ BOOST_AUTO_TEST_CASE( transactionDropReceive // 1st tx Transaction tx1 = fixture.tx_from_json( json ); - tx1.checkOutExternalGas( client->chainParams(), client->latestBlock().info().timestamp(), client->number() ); + tx1.checkOutExternalGas( + client->chainParams(), client->latestBlock().info().timestamp(), client->number() ); // submit it! tq->import( tx1 ); @@ -929,7 +953,7 @@ BOOST_AUTO_TEST_CASE( transactionDropReceive CHECK_NONCE_BEGIN( senderAddress ); BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{tx3}, utcTime(), 1U ) ); + stub->createBlock( ConsensusExtFace::transactions_vector{ tx3 }, utcTime(), 1U ) ); stub->setPriceForBlockId( 1, 1000 ); REQUIRE_BLOCK_INCREASE( 1 ); @@ -942,9 +966,8 @@ BOOST_AUTO_TEST_CASE( transactionDropReceive BOOST_REQUIRE_EQUAL( txns.size(), 1 ); } -BOOST_AUTO_TEST_CASE( transactionDropQueue, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - +BOOST_AUTO_TEST_CASE( + transactionDropQueue, *boost::unit_test::precondition( dev::test::run_not_express ) ) { SkaleHostFixture fixture; auto& client = fixture.client; auto& coinbase = fixture.coinbase; @@ -964,7 +987,8 @@ BOOST_AUTO_TEST_CASE( transactionDropQueue, // 1st tx Transaction tx1 = fixture.tx_from_json( json ); - tx1.checkOutExternalGas( client->chainParams(), client->latestBlock().info().timestamp(), client->number() ); + tx1.checkOutExternalGas( + client->chainParams(), client->latestBlock().info().timestamp(), client->number() ); // submit it! tq->import( tx1 ); @@ -986,8 +1010,8 @@ BOOST_AUTO_TEST_CASE( transactionDropQueue, CHECK_BALANCE_BEGIN( senderAddress ); CHECK_BLOCK_BEGIN; - BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{tx2.toBytes()}, utcTime(), 1U ) ); + BOOST_REQUIRE_NO_THROW( stub->createBlock( + ConsensusExtFace::transactions_vector{ tx2.toBytes() }, utcTime(), 1U ) ); stub->setPriceForBlockId( 1, 1000 ); REQUIRE_BLOCK_INCREASE( 1 ); @@ -1003,9 +1027,8 @@ BOOST_AUTO_TEST_CASE( transactionDropQueue, // TODO Check exact dropping reason! BOOST_AUTO_TEST_CASE( transactionDropByGasPrice - // , *boost::unit_test::precondition( dev::test::run_not_express ) - ) { - + // , *boost::unit_test::precondition( dev::test::run_not_express ) +) { SkaleHostFixture fixture; auto& client = fixture.client; auto& coinbase = fixture.coinbase; @@ -1025,7 +1048,8 @@ BOOST_AUTO_TEST_CASE( transactionDropByGasPrice // 1st tx Transaction tx1 = fixture.tx_from_json( json ); - tx1.checkOutExternalGas( client->chainParams(), client->latestBlock().info().timestamp(), client->number() ); + tx1.checkOutExternalGas( + client->chainParams(), client->latestBlock().info().timestamp(), client->number() ); // submit it! tq->import( tx1 ); @@ -1048,7 +1072,7 @@ BOOST_AUTO_TEST_CASE( transactionDropByGasPrice CHECK_BLOCK_BEGIN; BOOST_REQUIRE_NO_THROW( stub->createBlock( - ConsensusExtFace::transactions_vector{tx2.toBytes()}, utcTime(), 1U, 1000 ) ); + ConsensusExtFace::transactions_vector{ tx2.toBytes() }, utcTime(), 1U, 1000 ) ); stub->setPriceForBlockId( 1, 1100 ); REQUIRE_BLOCK_INCREASE( 1 ); @@ -1064,9 +1088,8 @@ BOOST_AUTO_TEST_CASE( transactionDropByGasPrice // TODO Check exact dropping reason! BOOST_AUTO_TEST_CASE( transactionDropByGasPriceReceive - // , *boost::unit_test::precondition( dev::test::run_not_express ) - ) { - + // , *boost::unit_test::precondition( dev::test::run_not_express ) +) { SkaleHostFixture fixture; auto& client = fixture.client; auto& coinbase = fixture.coinbase; @@ -1079,7 +1102,7 @@ BOOST_AUTO_TEST_CASE( transactionDropByGasPriceReceive auto receiver = KeyPair::create(); { - auto wr_state = client->state().createStateModifyCopy(); + auto wr_state = client->state().createStateCopyAndClearCaches(); wr_state.addBalance( fixture.account2.address(), 1 * ether ); wr_state.commit(); } @@ -1094,7 +1117,8 @@ BOOST_AUTO_TEST_CASE( transactionDropByGasPriceReceive // 1st tx Transaction tx1 = fixture.tx_from_json( json ); - tx1.checkOutExternalGas( client->chainParams(), client->latestBlock().info().timestamp(), client->number() ); + tx1.checkOutExternalGas( + client->chainParams(), client->latestBlock().info().timestamp(), client->number() ); // receive it! skaleHost->receiveTransaction( toJS( tx1.toBytes() ) ); @@ -1118,7 +1142,7 @@ BOOST_AUTO_TEST_CASE( transactionDropByGasPriceReceive CHECK_BLOCK_BEGIN; BOOST_REQUIRE_NO_THROW( stub->createBlock( - ConsensusExtFace::transactions_vector{tx2.toBytes()}, utcTime(), 1U, 1000 ) ); + ConsensusExtFace::transactions_vector{ tx2.toBytes() }, utcTime(), 1U, 1000 ) ); stub->setPriceForBlockId( 1, 1100 ); REQUIRE_BLOCK_INCREASE( 1 ); @@ -1133,9 +1157,8 @@ BOOST_AUTO_TEST_CASE( transactionDropByGasPriceReceive } BOOST_AUTO_TEST_CASE( transactionRace - // , *boost::unit_test::precondition( dev::test::run_not_express ) - ) { - + // , *boost::unit_test::precondition( dev::test::run_not_express ) +) { SkaleHostFixture fixture; auto& client = fixture.client; auto& coinbase = fixture.coinbase; @@ -1166,7 +1189,7 @@ BOOST_AUTO_TEST_CASE( transactionRace // 2 get it from consensus BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{tx.toBytes()}, utcTime(), 1U ) ); + stub->createBlock( ConsensusExtFace::transactions_vector{ tx.toBytes() }, utcTime(), 1U ) ); stub->setPriceForBlockId( 1, 1000 ); REQUIRE_BLOCK_INCREASE( 1 ); @@ -1189,9 +1212,8 @@ BOOST_AUTO_TEST_CASE( transactionRace // test two blocks with overlapping transactions :) BOOST_AUTO_TEST_CASE( partialCatchUp - // , *boost::unit_test::precondition( dev::test::run_not_express ) - ) { - + // , *boost::unit_test::precondition( dev::test::run_not_express ) +) { SkaleHostFixture fixture; auto& client = fixture.client; auto& coinbase = fixture.coinbase; @@ -1213,8 +1235,8 @@ BOOST_AUTO_TEST_CASE( partialCatchUp Transaction tx1( ts, ar.second ); // create 1 txns in 1 block - BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{tx1.toBytes()}, utcTime(), 1U ) ); + BOOST_REQUIRE_NO_THROW( stub->createBlock( + ConsensusExtFace::transactions_vector{ tx1.toBytes() }, utcTime(), 1U ) ); // now 2 txns json["value"] = jsToDecimal( toJS( 9000 * dev::eth::szabo ) ); @@ -1229,8 +1251,8 @@ BOOST_AUTO_TEST_CASE( partialCatchUp CHECK_BALANCE_BEGIN( senderAddress ); CHECK_BLOCK_BEGIN; - BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{tx1.toBytes(), tx2.toBytes()}, utcTime(), 2U ) ); + BOOST_REQUIRE_NO_THROW( stub->createBlock( + ConsensusExtFace::transactions_vector{ tx1.toBytes(), tx2.toBytes() }, utcTime(), 2U ) ); REQUIRE_BLOCK_INCREASE( 1 ); REQUIRE_BLOCK_SIZE( 2, 2 ); @@ -1241,7 +1263,6 @@ BOOST_AUTO_TEST_CASE( partialCatchUp } BOOST_AUTO_TEST_CASE( getBlockRandom ) { - SkaleHostFixture fixture; auto& skaleHost = fixture.skaleHost; @@ -1253,7 +1274,6 @@ BOOST_AUTO_TEST_CASE( getBlockRandom ) { } BOOST_AUTO_TEST_CASE( getIMABLSPUblicKey ) { - SkaleHostFixture fixture; auto& skaleHost = fixture.skaleHost; @@ -1261,15 +1281,19 @@ BOOST_AUTO_TEST_CASE( getIMABLSPUblicKey ) { auto res = exec( bytesConstRef() ); std::array< std::string, 4 > imaBLSPublicKey = skaleHost->getIMABLSPublicKey(); BOOST_REQUIRE( res.first ); - BOOST_REQUIRE( res.second == toBigEndian( dev::u256( imaBLSPublicKey[0] ) ) + toBigEndian( dev::u256( imaBLSPublicKey[1] ) ) + toBigEndian( dev::u256( imaBLSPublicKey[2] ) ) + toBigEndian( dev::u256( imaBLSPublicKey[3] ) ) ); + BOOST_REQUIRE( res.second == toBigEndian( dev::u256( imaBLSPublicKey[0] ) ) + + toBigEndian( dev::u256( imaBLSPublicKey[1] ) ) + + toBigEndian( dev::u256( imaBLSPublicKey[2] ) ) + + toBigEndian( dev::u256( imaBLSPublicKey[3] ) ) ); } -struct dummy{}; +struct dummy {}; // Test behavior of MTM if tx with big nonce was already mined as erroneous -BOOST_FIXTURE_TEST_CASE( mtmAfterBigNonceMined, dummy, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - SkaleHostFixture fixture( std::map( {{"multiTransactionMode", "1"}} ) ); +BOOST_FIXTURE_TEST_CASE( + mtmAfterBigNonceMined, dummy, *boost::unit_test::precondition( dev::test::run_not_express ) ) { + SkaleHostFixture fixture( + std::map< std::string, std::string >( { { "multiTransactionMode", "1" } } ) ); auto& client = fixture.client; auto& coinbase = fixture.coinbase; @@ -1301,14 +1325,14 @@ BOOST_FIXTURE_TEST_CASE( mtmAfterBigNonceMined, dummy, sleep( 1 ); ConsensusExtFace::transactions_vector proposal = stub->pendingTransactions( 100 ); // and not proposed - BOOST_REQUIRE_EQUAL(proposal.size(), 0); + BOOST_REQUIRE_EQUAL( proposal.size(), 0 ); CHECK_NONCE_BEGIN( senderAddress ); CHECK_BLOCK_BEGIN; // simulate it coming from another node - BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{tx1.toBytes()}, utcTime(), 1U ) ); + BOOST_REQUIRE_NO_THROW( stub->createBlock( + ConsensusExtFace::transactions_vector{ tx1.toBytes() }, utcTime(), 1U ) ); REQUIRE_BLOCK_SIZE( 1, 1 ); REQUIRE_BLOCK_TRANSACTION( 1, 0, tx1Hash ); @@ -1327,10 +1351,10 @@ BOOST_FIXTURE_TEST_CASE( mtmAfterBigNonceMined, dummy, skaleHost->receiveTransaction( toJS( tx2.toBytes() ) ); sleep( 1 ); proposal = stub->pendingTransactions( 100 ); - BOOST_REQUIRE_EQUAL(proposal.size(), 2); + BOOST_REQUIRE_EQUAL( proposal.size(), 2 ); BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{proposal[0]}, utcTime(), 2U ) ); + stub->createBlock( ConsensusExtFace::transactions_vector{ proposal[0] }, utcTime(), 2U ) ); REQUIRE_BLOCK_INCREASE( 2 ); REQUIRE_BLOCK_SIZE( 2, 1 ); @@ -1340,17 +1364,15 @@ BOOST_FIXTURE_TEST_CASE( mtmAfterBigNonceMined, dummy, // 3 submit nonce = 1 again! // it should go to proposal - BOOST_REQUIRE_THROW( - skaleHost->receiveTransaction( toJS( tx1.toBytes() ) ), - dev::eth::PendingTransactionAlreadyExists - ); + BOOST_REQUIRE_THROW( skaleHost->receiveTransaction( toJS( tx1.toBytes() ) ), + dev::eth::PendingTransactionAlreadyExists ); sleep( 1 ); proposal = stub->pendingTransactions( 100 ); - BOOST_REQUIRE_EQUAL(proposal.size(), 1); + BOOST_REQUIRE_EQUAL( proposal.size(), 1 ); // submit it for sure BOOST_REQUIRE_NO_THROW( - stub->createBlock( ConsensusExtFace::transactions_vector{proposal[0]}, utcTime(), 3U ) ); + stub->createBlock( ConsensusExtFace::transactions_vector{ proposal[0] }, utcTime(), 3U ) ); } BOOST_AUTO_TEST_SUITE_END() diff --git a/test/unittests/libethereum/StateUnitTests.cpp b/test/unittests/libethereum/StateUnitTests.cpp index 413894e0c..e9f306cee 100644 --- a/test/unittests/libethereum/StateUnitTests.cpp +++ b/test/unittests/libethereum/StateUnitTests.cpp @@ -44,7 +44,7 @@ BOOST_AUTO_TEST_CASE( Basic, BOOST_AUTO_TEST_CASE( LoadAccountCode ) { Address addr{"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}; State state( 0 ); - State s = state.createStateModifyCopy(); + State s = state.createStateCopyAndClearCaches(); s.createContract( addr ); uint8_t codeData[] = {'c', 'o', 'd', 'e'}; u256 version = 123; @@ -66,7 +66,7 @@ class AddressRangeTestFixture : public TestOutputHelperFixture { } // create accounts in the state - State writer = state.createStateModifyCopy(); + State writer = state.createStateCopyAndClearCaches(); for ( auto const& hashAndAddr : hashToAddress ) writer.addBalance( hashAndAddr.second, 100 ); writer.commit( dev::eth::CommitBehaviour::RemoveEmptyAccounts ); @@ -84,7 +84,7 @@ BOOST_FIXTURE_TEST_SUITE( StateAddressRangeTests, AddressRangeTestFixture ) BOOST_AUTO_TEST_CASE( addressesReturnsAllAddresses, *boost::unit_test::precondition( dev::test::run_not_express ) ) { std::pair< State::AddressMap, h256 > addressesAndNextKey = - state.createStateReadOnlyCopy().addresses( h256{}, addressCount * 2 ); + state.addresses(h256{}, addressCount * 2 ); State::AddressMap addresses = addressesAndNextKey.first; BOOST_CHECK_EQUAL( addresses.size(), addressCount ); @@ -95,7 +95,7 @@ BOOST_AUTO_TEST_CASE( addressesReturnsAllAddresses, BOOST_AUTO_TEST_CASE( addressesReturnsNoMoreThanRequested ) { uint maxResults = 3; std::pair< State::AddressMap, h256 > addressesAndNextKey = - state.createStateReadOnlyCopy().addresses( h256{}, maxResults ); + state.addresses(h256{}, maxResults ); State::AddressMap& addresses = addressesAndNextKey.first; h256& nextKey = addressesAndNextKey.second; @@ -106,7 +106,7 @@ BOOST_AUTO_TEST_CASE( addressesReturnsNoMoreThanRequested ) { // request next chunk std::pair< State::AddressMap, h256 > addressesAndNextKey2 = - state.createStateReadOnlyCopy().addresses( nextKey, maxResults ); + state.addresses(nextKey, maxResults ); State::AddressMap& addresses2 = addressesAndNextKey2.first; BOOST_CHECK_EQUAL( addresses2.size(), maxResults ); auto itHashToAddressEnd2 = std::next( itHashToAddressEnd, maxResults ); @@ -114,7 +114,7 @@ BOOST_AUTO_TEST_CASE( addressesReturnsNoMoreThanRequested ) { } BOOST_AUTO_TEST_CASE( addressesDoesntReturnDeletedInCache ) { - State s = state.createStateReadOnlyCopy(); + State s = state; // delete some accounts unsigned deleteCount = 3; @@ -133,7 +133,7 @@ BOOST_AUTO_TEST_CASE( addressesDoesntReturnDeletedInCache ) { BOOST_AUTO_TEST_CASE( addressesReturnsCreatedInCache, *boost::unit_test::precondition( dev::test::run_not_express ) ) { - State s = state.createStateReadOnlyCopy(); + State s = state; // create some accounts unsigned createCount = 3; diff --git a/test/unittests/libevm/VMTest.cpp b/test/unittests/libevm/VMTest.cpp index 9edcf9aeb..13e24a95b 100644 --- a/test/unittests/libevm/VMTest.cpp +++ b/test/unittests/libevm/VMTest.cpp @@ -53,7 +53,7 @@ class Create2TestFixture : public TestOutputHelperFixture { public: explicit Create2TestFixture( VMFace* _vm ) : vm{_vm} { state.addBalance( address, 1 * ether ); } - virtual ~Create2TestFixture() { state.releaseWriteLock(); } + virtual ~Create2TestFixture() { } void testCreate2worksInConstantinople() { ExtVM extVm( state, envInfo, se->chainParams(), address, address, address, value, gasPrice, @@ -172,7 +172,7 @@ class Create2TestFixture : public TestOutputHelperFixture { LastBlockHashes lastBlockHashes; Address address{KeyPair::create().address()}; // State state{0}; - State state = State( 0 ).createStateModifyCopy(); + State state = State(0).createStateCopyAndClearCaches(); std::unique_ptr< SealEngineFace > se{ ChainParams( genesisInfo( Network::ConstantinopleTest ) ).createSealEngine()}; EnvInfo envInfo{blockHeader, lastBlockHashes, 1, 0, se->chainParams().chainID}; @@ -379,7 +379,7 @@ class SstoreTestFixture : public TestOutputHelperFixture { state.addBalance( to, 1 * ether ); } - virtual ~SstoreTestFixture() { state.releaseWriteLock(); } + virtual ~SstoreTestFixture() { } void testEip1283Case1() { testGasConsumed( "0x60006000556000600055", 0, 412, 0 ); } @@ -441,7 +441,7 @@ class SstoreTestFixture : public TestOutputHelperFixture { LastBlockHashes lastBlockHashes; Address from{KeyPair::create().address()}; Address to{KeyPair::create().address()}; - State state = State( 0 ).createStateModifyCopy(); + State state = State(0).createStateCopyAndClearCaches(); std::unique_ptr< SealEngineFace > se{ ChainParams( genesisInfo( Network::ConstantinopleTest ) ).createSealEngine()}; EnvInfo envInfo{blockHeader, lastBlockHashes, 1, 0, se->chainParams().chainID}; @@ -463,10 +463,7 @@ class LegacyVMSstoreTestFixture : public SstoreTestFixture { LegacyVMSstoreTestFixture() : SstoreTestFixture{new LegacyVM} {} }; -class SkaleInterpreterSstoreTestFixture : public SstoreTestFixture { -public: - SkaleInterpreterSstoreTestFixture() : SstoreTestFixture{new EVMC{evmc_create_interpreter()}} {} -}; + class ChainIDTestFixture : public TestOutputHelperFixture { public: @@ -988,92 +985,6 @@ BOOST_AUTO_TEST_CASE( SkaleInterpreterExtCodeHashIgnoresHigh12Bytes, BOOST_AUTO_TEST_SUITE_END() -BOOST_FIXTURE_TEST_SUITE( SkaleInterpreterSstoreSuite, SkaleInterpreterSstoreTestFixture ) - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case1, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - testEip1283Case1(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case2, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - testEip1283Case2(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case3, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - testEip1283Case3(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case4, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - testEip1283Case4(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case5, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - testEip1283Case5(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case6, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - testEip1283Case6(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case7, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - testEip1283Case7(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case8 ) { - testEip1283Case8(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case9 ) { - testEip1283Case9(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case10, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - testEip1283Case10(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case11, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - testEip1283Case11(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case12, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - testEip1283Case12(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case13, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - testEip1283Case13(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case14, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - testEip1283Case14(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case15, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - testEip1283Case15(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case16, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - testEip1283Case16(); -} - -BOOST_AUTO_TEST_CASE( SkaleInterpreterSstoreEip1283Case17, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { - testEip1283Case17(); -} - -BOOST_AUTO_TEST_SUITE_END() BOOST_FIXTURE_TEST_SUITE( SkaleInterpreterChainIDSuite, SkaleInterpreterChainIDTestFixture ) diff --git a/test/unittests/libtesteth/blockchainTest.cpp b/test/unittests/libtesteth/blockchainTest.cpp index ee4091f01..21399a1f0 100644 --- a/test/unittests/libtesteth/blockchainTest.cpp +++ b/test/unittests/libtesteth/blockchainTest.cpp @@ -153,7 +153,7 @@ BOOST_AUTO_TEST_CASE( fillingExpectationOnSingleNetwork, } -BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES( fillingWithWrongExpectation, 2 ) +BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES( fillingWithWrongExpectation, 1 ) BOOST_AUTO_TEST_CASE( fillingWithWrongExpectation ) { cout << "BlockChainTestSuite/fillingWithWrongExpectation test - failure is expected\n"; diff --git a/test/unittests/libweb3jsonrpc/SkaledFixture.cpp b/test/unittests/libweb3jsonrpc/SkaledFixture.cpp new file mode 100644 index 000000000..45b85ddc9 --- /dev/null +++ b/test/unittests/libweb3jsonrpc/SkaledFixture.cpp @@ -0,0 +1,931 @@ +/* +Modifications Copyright (C) 2024- SKALE Labs + + This file is part of cpp-ethereum. + + cpp-ethereum is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + cpp-ethereum is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with cpp-ethereum. If not, see . +*/ + +#pragma GCC diagnostic ignored "-Wdeprecated" + +#include "WebThreeStubClient.h" + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "libweb3jsonrpc/SkaleFace.h" + +#include +#include +#include +#include +#include +#include + +#include "SkaledFixture.h" +#include + +#include + + +// Callback function to handle data received from the server +size_t WriteCallback( void* contents, size_t size, size_t nmemb, void* userp ) { + ( ( std::string* ) userp )->append( ( char* ) contents, size * nmemb ); + return size * nmemb; +} + + +void CurlClient::resetCurl() { + if ( headers ) { + curl_slist_free_all( headers ); + headers = curl_slist_append( nullptr, "Content-Type: application/json" ); + } + curl_easy_reset( curl ); + curl_easy_setopt( curl, CURLOPT_URL, this->skaledEndpoint.c_str() ); + curl_easy_setopt( curl, CURLOPT_POST, 1L ); + curl_easy_setopt( curl, CURLOPT_POST, 1L ); + // Set up callback to capture response + curl_easy_setopt( curl, CURLOPT_WRITEFUNCTION, WriteCallback ); + readBuffer = ""; + curl_easy_setopt( curl, CURLOPT_WRITEDATA, &readBuffer ); + // Set HTTP headers + headers = curl_slist_append( nullptr, "Content-Type: application/json" ); + curl_easy_setopt( curl, CURLOPT_HTTPHEADER, headers ); +} +CurlClient::CurlClient::CurlClient( SkaledFixture& _fixture ) { + curl = curl_easy_init(); + CHECK( curl ); + skaledEndpoint = _fixture.skaledEndpoint; + CHECK( !skaledEndpoint.empty() ) + resetCurl(); +} + +void CurlClient::setRequest( const string& _json_rpc_request ) { + resetCurl(); + curl_easy_setopt( curl, CURLOPT_POSTFIELDS, _json_rpc_request.c_str() ); + curl_easy_setopt( curl, CURLOPT_POSTFIELDSIZE, _json_rpc_request.size() ); +} + +Json::Value CurlClient::doRequestResponse() { + auto res = curl_easy_perform( curl ); + if ( res != CURLE_OK ) { + throw std::runtime_error( + string( "curl_easy_perform() failed" ) + curl_easy_strerror( res ) ); + } + + Json::CharReaderBuilder readerBuilder; + Json::Value root; + std::string errs; + + // Parse the JSON string + std::istringstream ss( readBuffer ); + if ( Json::parseFromStream( readerBuilder, ss, &root, &errs ) ) { + // Accessing JSON data + if ( root.isMember( "result" ) ) { + return root["result"]; + } else if (root.isMember( "error" )) { + CHECK( root["error"].isObject() ); + auto errorDescription = root["error"]; + string description = "JSON-RPC error:"; + if (errorDescription.isMember( "code" )) { + description += errorDescription["code"].asString() + ":"; + } + + if (errorDescription.isMember( "message" )) { + description += errorDescription["message"].asString() + ":"; + }; + + throw std::runtime_error( description); + } else { + throw std::runtime_error( "No result or error in response" ); + Json::StreamWriterBuilder writer; + writer["indentation"] = " "; // Set indentation level (2 spaces here) + + // Convert the Json::Value to a string + std::string output = Json::writeString(writer, root); + throw std::runtime_error( "No result or error in response:" + output); + } + } else { + // Output error message if parsing fails + cerr << "Failed to parse JSON: " << errs << std::endl; + throw runtime_error( "Failed to parse JSON" ); + } + + return ++totalCallsCount; +} + +std::atomic< uint64_t > CurlClient::totalCallsCount = 0; + +Json::Value CurlClient::parseResponse() { + Json::CharReaderBuilder readerBuilder; + Json::Value jsonData; + std::string errs; + std::istringstream s( readBuffer ); + if ( !Json::parseFromStream( readerBuilder, s, &jsonData, &errs ) ) { + throw std::runtime_error( "Failed to parse JSON response: " + errs ); + } + return jsonData; +} + +CurlClient::~CurlClient() { + curl_slist_free_all( headers ); + curl_easy_cleanup( curl ); +} + +uint64_t CurlClient::getTotalCallsCount() { + return totalCallsCount; +} + +string CurlClient::eth_sendRawTransaction( const std::string& _rawTransactionHex ) { + std::string jsonPayload = R"({"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[")" + + _rawTransactionHex + R"("],"id":1})"; + setRequest( jsonPayload ); + auto result = doRequestResponse(); + return result.asString(); +} + +void CurlClient::doRequestResponseAndCheckForError( + std::string jsonPayload, Json::Value& response ) { + setRequest( jsonPayload ); + doRequestResponse(); + response = parseResponse(); + if ( response.isMember( "error" ) ) { + auto errorObject = response["error"]; + string errorMessage = "eth_getBalance returned error."; + if ( errorObject.isMember( "message" ) ) { + errorMessage += errorObject["message"].asString(); + } + throw runtime_error( errorMessage ); + } +} +u256 CurlClient::eth_getBalance( const std::string& _addressString ) { + std::string jsonPayload = R"({"jsonrpc":"2.0","method":"eth_getBalance","params":[")" + + _addressString + R"(","latest"],"id":1})"; + Json::Value response; + doRequestResponseAndCheckForError( jsonPayload, response ); + + CHECK( response.isMember( "result" ) ); + auto resultStr = response["result"].asString(); + return jsToU256( resultStr ); +} + +u256 CurlClient::eth_getTransactionCount( const std::string& _addressString ) { + std::string jsonPayload = R"({"jsonrpc":"2.0","method":"eth_getTransactionCount","params":[")" + + _addressString + R"(","latest"],"id":1})"; + Json::Value response; + doRequestResponseAndCheckForError( jsonPayload, response ); + + CHECK( response.isMember( "result" ) ); + auto resultStr = response["result"].asString(); + return jsToU256( resultStr ); +} + +Json::Value CurlClient::eth_getTransactionReceipt( const std::string& _hash ) { + std::string jsonPayload = + R"({"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":[")" + _hash + + R"("],"id":1})"; + Json::Value response; + doRequestResponseAndCheckForError( jsonPayload, response ); + + CHECK( response.isMember( "result" ) ); + if ( !response["result"].isObject() ) { + cerr << response << endl; + } + CHECK( response["result"].isObject() ); + CHECK( response["result"]["status"].isString() ); + if ( response["result"]["status"].asString() == "0x0" ) { + cerr << response << endl; + throw std::runtime_error( "Transaction reverted" ); + } + return response["result"]; +} + + +string SkaledFixture::readFile( const std::string& _path ) { + CHECK( boost::filesystem::exists( _path ) ); + + boost::filesystem::ifstream stream( _path, std::ios::in | std::ios::binary ); + + CHECK( stream.is_open() ); + + string contents( + ( std::istreambuf_iterator< char >( stream ) ), std::istreambuf_iterator< char >() ); + + return contents; +} + +thread_local ptr< CurlClient > SkaledFixture::curlClient; + +ptr< CurlClient > SkaledFixture::getThreadLocalCurlClient() { + if ( !curlClient ) { + curlClient = make_shared< CurlClient >( *this ); + } + return curlClient; +}; + +const u256 FIRST_WALLET_FUNDING( "10000000000000000000000000000000000000000000" ); + +void SkaledFixture::setupFirstKey() { + auto firstAccount = SkaledAccount::generate(); + CHECK( testAccounts.try_emplace( firstAccount->getAddressAsString(), firstAccount ).second ); + auto gasPrice = getCurrentGasPrice(); + auto ownerBalance = getBalance( ownerAccount->getAddressAsString() ); + + cout << "Owner wallet:" << ownerAccount->getAddressAsString() << endl; + cout << "Owner balance, wei:" << ownerBalance << endl; + cout << "First wallet:" << firstAccount->getAddressAsString() << endl; + cout << "Gas price, wei " << gasPrice << endl; + sendSingleTransfer( FIRST_WALLET_FUNDING, ownerAccount, firstAccount->getAddressAsString(), + gasPrice, TransferType::NATIVE, TransactionWait::WAIT_FOR_COMPLETION ); + cout << "Transferred " << FIRST_WALLET_FUNDING << " wei to the first wallet" << endl; + CHECK( getBalance( firstAccount->getAddressAsString() ) == FIRST_WALLET_FUNDING ); + CHECK( getBalance( ownerAccount->getAddressAsString() ) > FIRST_WALLET_FUNDING ); + // set owner account to null to make sure it is not in the test anymore + // the owner account is used to fund th first + ownerAccount = nullptr; +} + +void SkaledFixture::deployERC20() { + cout << "Deploying test ERC20 contract ... " << endl; + + + std::ifstream inputFile( + "../../test/unittests/libweb3jsonrpc/contracts/ERC20_bytecode.txt" ); // Open the file + CHECK( inputFile ) + std::string content; + std::getline( inputFile, content ); // Read the string from the file + inputFile.close(); // Close the file + + + auto gasPrice = getCurrentGasPrice(); + + CHECK( testAccounts.size() > 0 ); + + auto hash = sendSingleDeployOrSolidityCall( 0, this->testAccounts.begin()->second, std::nullopt, + content, gasPrice, TransactionWait::WAIT_FOR_COMPLETION ); + + + auto receipt = getThreadLocalCurlClient()->eth_getTransactionReceipt( hash ); + CHECK( receipt.isMember( "contractAddress" ) ); + CHECK( receipt["contractAddress"].isString() ); + erc20ContractAddress = receipt["contractAddress"].asString(); + cout << "Deployed test ERC20 contract at address:" << erc20ContractAddress << endl; + cout << "Gas used " << receipt["gasUsed"].asString() << endl; + + + // mint zero tokens to check contract works + mintERC20( testAccounts.begin()->second, testAccounts.begin()->first, u256( 0 ), + getCurrentGasPrice(), TransactionWait::WAIT_FOR_COMPLETION ); +} + + +string SkaledFixture::checkReceiptStatusAndGetGasUsed( string _hash ) { + CHECK( _hash.size() == 66 ); + auto receipt = getThreadLocalCurlClient()->eth_getTransactionReceipt( _hash ); + + CHECK( receipt.isMember( "gasUsed" ) ); + CHECK( receipt["gasUsed"].isString() ); + + return receipt["gasUsed"].asString(); +} +void SkaledFixture::mintERC20( std::shared_ptr< SkaledAccount > _minter, const string& _address, + u256 _amount, u256 _gasPrice, TransactionWait _wait ) { + CHECK( _minter ); + CHECK( testAccounts.size() > 0 ); + CHECK( _address.size() == 42 ); + auto amountString = toHex( _amount ); + CHECK( amountString.size() == 64 ); + + auto data = this->MINT_FUNCTION_SELECTOR + _address.substr( 2 ) + amountString; + + auto hash = sendSingleDeployOrSolidityCall( + 0, _minter, this->erc20ContractAddress, data, _gasPrice, _wait ); + + if ( _wait == TransactionWait::WAIT_FOR_COMPLETION ) { + checkReceiptStatusAndGetGasUsed( _minter->getLastTxHash() ); + } +} + + +void SkaledFixture::setupTwoToTheNKeys( uint64_t _n ) { + mutex testAccountsMutex; + + for ( uint64_t j = 0; j < _n; j++ ) { + cout << "Creating test wallets. Iteration " << j + << " wallets created: " << testAccounts.size() << endl; + + + map< string, std::shared_ptr< SkaledAccount > > testAccountsCopy; + + { + lock_guard< mutex > lock( testAccountsMutex ); + testAccountsCopy = testAccounts; + } + + map< string, shared_ptr< SkaledAccount > > oldNewPairs; + + for ( auto&& testAccount : testAccountsCopy ) { + auto newAccount = SkaledAccount::generate(); + string address = newAccount->getAddressAsString(); + CHECK( testAccounts.count( address ) == 0 ); + oldNewPairs.emplace( testAccount.first, newAccount ); + // add the new account to the map + lock_guard< mutex > lock( testAccountsMutex ); + CHECK( testAccounts.count( newAccount->getAddressAsString() ) == 0 ); + testAccounts.emplace( newAccount->getAddressAsString(), newAccount ); + } + + auto begin = getCurrentTimeMs(); + + + auto gasPrice = getCurrentGasPrice(); + + vector< shared_ptr< thread > > threads; + + for ( auto&& testAccount : testAccountsCopy ) { + if ( useThreadsForTestKeyCreation ) { + auto t = make_shared< thread >( [&]() { + auto oldAccount = testAccount.second; + auto newAccount = oldNewPairs.at( testAccount.first ); + splitAccountInHalves( oldAccount, newAccount, gasPrice, + TransactionWait::DONT_WAIT_FOR_COMPLETION ); + } ); + threads.push_back( t ); + } else { + auto oldAccount = testAccount.second; + auto newAccount = oldNewPairs.at( testAccount.first ); + splitAccountInHalves( + oldAccount, newAccount, gasPrice, TransactionWait::DONT_WAIT_FOR_COMPLETION ); + } + } + + + cout << 1000.0 * testAccountsCopy.size() / ( getCurrentTimeMs() - begin ) + << " submission tps " << endl; + + if ( useThreadsForTestKeyCreation ) { + for ( auto&& t : threads ) { + t->join(); + } + } + + for ( auto&& account : testAccountsCopy ) { + waitForTransaction( account.second ); + }; + + cout << 1000.0 * testAccountsCopy.size() / ( getCurrentTimeMs() - begin ) << " total tps " + << endl; + } + + + for ( auto&& testAccount : testAccounts ) { + testAccountsVector.push_back( testAccount.second ); + } + + cout << "Creating keys completed. Total test wallets created:" << testAccounts.size() << endl; +} + + +void SkaledFixture::doOneTinyTransfersIteration( TransferType _transferType ) { + CHECK( threadsCountForTestTransactions <= testAccounts.size() ); + auto transactionsPerThread = testAccounts.size() / threadsCountForTestTransactions; + + auto begin = getCurrentTimeMs(); + + auto gasPrice = getCurrentGasPrice(); + + vector< shared_ptr< thread > > threads; + + CHECK( testAccountsVector.size() == testAccounts.size() ); + + + for ( uint64_t accountNum = 0; accountNum < testAccountsVector.size(); accountNum++ ) { + if ( threadsCountForTestTransactions > 1 ) { + if ( accountNum % transactionsPerThread == 0 ) { + uint64_t threadNumber = accountNum / transactionsPerThread; + auto t = make_shared< thread >( + [transactionsPerThread, threadNumber, gasPrice, _transferType, this]() { + for ( uint64_t j = 0; j < transactionsPerThread; j++ ) { + auto account = + testAccountsVector.at( threadNumber * transactionsPerThread + j ); + sendTinyTransfer( account, gasPrice, _transferType, + TransactionWait::DONT_WAIT_FOR_COMPLETION ); + } + } ); + threads.push_back( t ); + } + } else { + auto oldAccount = testAccountsVector.at( accountNum ); + sendTinyTransfer( + oldAccount, gasPrice, _transferType, TransactionWait::DONT_WAIT_FOR_COMPLETION ); + CHECK( oldAccount->getLastSentNonce() >= 0 ) + CHECK( testAccountsVector.at( accountNum )->getLastSentNonce() >= 0 ); + } + } + + + if ( threadsCountForTestTransactions > 1 ) { + CHECK( threads.size() == threadsCountForTestTransactions ); + for ( auto&& t : threads ) { + t->join(); + } + } + + + cout << 1000.0 * testAccounts.size() * mtmBatchSize / ( getCurrentTimeMs() - begin ) << + " submission tps" << endl; + + + for ( auto&& account : testAccounts ) { + waitForTransactionOrBatch(account.second, mtmBatchSize ); + }; + + cout << 1000.0 * testAccounts.size() * mtmBatchSize / ( getCurrentTimeMs() - begin ) + << " total tps" << endl; + + for ( auto&& account : testAccountsVector ) { + checkReceiptStatusAndGetGasUsed( account->getLastTxHash() ); + } +} + + +void SkaledFixture::mintAllKeysWithERC20() { + CHECK( threadsCountForTestTransactions <= testAccounts.size() ); + auto transactionsPerThread = testAccounts.size() / threadsCountForTestTransactions; + + auto begin = getCurrentTimeMs(); + + auto gasPrice = getCurrentGasPrice(); + + vector< shared_ptr< thread > > threads; + + CHECK( testAccountsVector.size() == testAccounts.size() ); + + + for ( uint64_t accountNum = 0; accountNum < testAccountsVector.size(); accountNum++ ) { + if ( threadsCountForTestTransactions > 1 ) { + if ( accountNum % transactionsPerThread == 0 ) { + uint64_t threadNumber = accountNum / transactionsPerThread; + auto t = + make_shared< thread >( [transactionsPerThread, threadNumber, gasPrice, this]() { + for ( uint64_t j = 0; j < transactionsPerThread; j++ ) { + auto account = + testAccountsVector.at( threadNumber * transactionsPerThread + j ); + auto address = account->getAddressAsString(); + mintERC20( account, address, 1000000, gasPrice, + TransactionWait::DONT_WAIT_FOR_COMPLETION ); + } + } ); + threads.push_back( t ); + } + } else { + auto account = testAccountsVector.at( accountNum ); + auto address = account->getAddressAsString(); + mintERC20( + account, address, 1000000000, gasPrice, TransactionWait::DONT_WAIT_FOR_COMPLETION ); + CHECK( account->getLastSentNonce() >= 0 ) + CHECK( testAccountsVector.at( accountNum )->getLastSentNonce() >= 0 ); + } + } + + + if ( threadsCountForTestTransactions > 1 ) { + CHECK( threads.size() == threadsCountForTestTransactions ); + for ( auto&& t : threads ) { + t->join(); + } + } + + + cout << 1000.0 * testAccounts.size() / ( getCurrentTimeMs() - begin ) << " Mint submission tps" + << endl; + + + for ( auto&& account : testAccounts ) { + waitForTransaction( account.second ); + }; + + // just for the first tc check the first transaction completed ok + checkReceiptStatusAndGetGasUsed( testAccountsVector.front()->getLastTxHash() ); + + cout << 1000.0 * testAccounts.size() / ( getCurrentTimeMs() - begin ) << " Mint total tps" + << endl; +} + + +void SkaledFixture::sendTinyTransfersForAllAccounts( + uint64_t _iterations, TransferType _transferType ) { + cout << "Running tiny transfers for accounts :" << testAccounts.size() << endl; + + for ( uint64_t iteration = 0; iteration < _iterations; iteration++ ) { + doOneTinyTransfersIteration( _transferType ); + } +} + + +void SkaledFixture::readInsecurePrivateKeyFromHardhatConfig() { + // get insecure test private key from hardhat config + auto hardHatConfig = readFile( HARDHAT_CONFIG_FILE_NAME ); + + std::istringstream stream( hardHatConfig ); + std::string line; + string insecurePrivateKey; + while ( std::getline( stream, line ) ) { + if ( line.find( "INSECURE_PRIVATE_KEY" ) != std::string::npos ) { + size_t start = line.find( '"' ) + 1; + size_t end = line.rfind( '"' ); + insecurePrivateKey = line.substr( start, end - start ); + break; + } + } + + + CHECK( !insecurePrivateKey.empty() ); + string ownerKeyStr = "0x" + insecurePrivateKey; + Secret ownerSecret( ownerKeyStr ); + + + auto transactionCount = getTransactionCount( ownerAddressStr ); + ownerAccount = SkaledAccount::getInstance( ownerSecret, transactionCount ); + auto balance = getBalance( ownerAccount->getAddressAsString() ); + CHECK( balance > 0 ); +} + +uint64_t SkaledFixture::getCurrentTimeMs() { + using namespace std::chrono; + return duration_cast< milliseconds >( system_clock::now().time_since_epoch() ).count(); +} + + +SkaledFixture::SkaledFixture( const std::string& _configPath ) { + static atomic_bool isCurlInited( false ); + + if ( isCurlInited.exchange( true ) ) { + curl_global_init( CURL_GLOBAL_DEFAULT ); + } + + auto config = readFile( _configPath ); + + Json::Value ret; + Json::Reader().parse( config, ret ); + + ownerAddressStr = ret["skaleConfig"]["sChain"]["schainOwner"].asString(); + boost::algorithm::to_lower( ownerAddressStr ); + ip = ret["skaleConfig"]["sChain"]["nodes"][0]["ip"].asString(); + CHECK( !ip.empty() ) + basePort = ret["skaleConfig"]["sChain"]["nodes"][0]["basePort"].asInt(); + CHECK( basePort > 0 ) + + + auto chainIdStr = ret["params"]["chainID"].asString(); + + // trim 0x + chainIdStr = chainIdStr.substr( 2 ); + chainId = std::stoull( chainIdStr, nullptr, 16 ); + + auto coinbaseTest = dev::KeyPair( + dev::Secret( "0x1c2cd4b70c2b8c6cd7144bbbfbd1e5c6eacb4a5efd9c86d0e29cbbec4e8483b9" ) ); + auto account3Test = dev::KeyPair( + dev::Secret( "0x23ABDBD3C61B5330AF61EBE8BEF582F4E5CC08E554053A718BDCE7813B9DC1FC" ) ); + + skaledEndpoint = "http://" + ip + ":" + std::to_string( basePort + 3 ); + + cout << "Skaled Endpoint: " << skaledEndpoint << std::endl; + + + u256 blockNumber = 0; + + cout << "Waiting for skaled ..."; + + while ( blockNumber == 0 ) { + try { + blockNumber = jsToU256( rpcClient()->eth_blockNumber() ); + cout << "Got block number " << blockNumber << std::endl; + } catch ( std::exception& e ) { + cout << e.what() << std::endl; + sleep( 1 ); + }; + } + + cout << "Starting test" << std::endl; + + + readInsecurePrivateKeyFromHardhatConfig(); +} + +SkaledFixture::~SkaledFixture() { + BOOST_TEST_MESSAGE( "Destructed SkaledFixture" ); +} + +u256 SkaledFixture::getTransactionCount( const string& _address ) { + auto count = jsToU256( this->rpcClient()->eth_getTransactionCount( _address, "latest" ) ); + + return count; +} + +u256 SkaledFixture::getCurrentGasPrice() { + auto gasPrice = jsToU256( rpcClient()->eth_gasPrice() ); + CHECK( gasPrice < 1000000 ) + return gasPrice; +} + +u256 SkaledFixture::getBalance( const string& _address ) const { + return jsToU256( rpcClient()->eth_getBalance( _address, "latest" ) ); +} + +u256 SkaledFixture::getBalance( const SkaledAccount& _account ) const { + return getBalance( _account.getAddressAsString() ); +} + +string SkaledFixture::getTxPayload( Transaction& transaction ) { + vector< uint8_t > txBytes = transaction.toBytes(); + auto result = toJson( transaction, txBytes ); + + CHECK( result["raw"] ); + CHECK( result["tx"] ); + + return result["raw"].asString(); +} + +// this call sends ether a single transfer, or multiple copies of same transfer. +// the latter is used in MTM mode testing. For a single transder _batchSize = 1 +void SkaledFixture::sendSingleTransferOrBatch( u256 _amount, std::shared_ptr< SkaledAccount > _from, + const string& _to, const u256& _gasPrice, uint64_t _batchSize, TransferType _transferType, + TransactionWait _wait ) { + auto from = _from->getAddressAsString(); + auto accountNonce = _from->computeNonceForNextTransactionOrBatch(_batchSize); + u256 dstBalanceBefore; + + + if ( this->verifyTransactions ) { + CHECK( accountNonce == getTransactionCount( from ) ); + u256 srcBalanceBefore = getBalance( _from->getAddressAsString() ); + CHECK( srcBalanceBefore > 0 ); + if ( 21000 * _gasPrice + _amount > srcBalanceBefore ) { + cout << "Not enough balance to send a transfer" << endl; + cout << "Wallet:" << from << endl; + cout << "Balance:" << srcBalanceBefore << endl; + cout << "Transfer amount: " << _amount << endl; + cout << "Gas price" << _gasPrice << endl; + cout << "Missing amount:" << 21000 * _gasPrice + _amount - srcBalanceBefore << endl; + } + + CHECK( 21000 * _gasPrice + _amount <= srcBalanceBefore ); + + CHECK( srcBalanceBefore > 0 ); + dstBalanceBefore = getBalance( _to ); + CHECK( dstBalanceBefore == 0 ); + } + + Json::Value t; + t["from"] = from; + auto amountString = toHex( _amount ); + if ( _transferType == TransferType::NATIVE ) { + t["value"] = "0x" + amountString; + } else { + t["data"] = "0x" + MINT_FUNCTION_SELECTOR + from.substr( 2 ) + amountString; + } + t["to"] = _to; + TransactionSkeleton ts = toTransactionSkeleton( t ); + ts.nonce = accountNonce; + ts.nonce = accountNonce; + ts.gas = 90000; + ts.gasPrice = _gasPrice; + + vector txHashes; + + for (uint64_t i = 0; i < _batchSize; i++) { + Transaction transaction( ts ); + transaction.forceChainId( chainId ); + transaction.forceType( this->transactionType ); + if ( transactionType == TransactionType::Type2 ) { + transaction.forceType2Fees( _gasPrice, _gasPrice ); + } + + if (usePow) { + calculateAndSetPowGas(transaction); + } + + transaction.sign( _from->getKey() ); + CHECK( transaction.chainId() ); + + auto payload = getTxPayload( transaction ); + + try { + auto txHash = getThreadLocalCurlClient()->eth_sendRawTransaction( payload ); + txHashes.push_back( txHash ); + } catch ( std::exception& e ) { + cerr << "Exception in eth_sendRawTransaction from: " << transaction.from() << + ": nonce: " << transaction.nonce() << endl; + cerr << e.what() << endl; + throw e; + } + + if ( _wait == TransactionWait::WAIT_FOR_COMPLETION ) { + waitForTransaction( _from ); + + if ( this->verifyTransactions && _transferType == TransferType::NATIVE ) { + auto balanceAfter = getBalance( _to ); + CHECK( balanceAfter - dstBalanceBefore == _amount ); + } + } + ++ts.nonce; + } + + _from->setLastTxHash( txHashes.back()); +} + + +string SkaledFixture::sendSingleDeployOrSolidityCall( u256 _amount, + std::shared_ptr< SkaledAccount > _from, std::optional< string > _to, const string& _data, + const u256& _gasPrice, TransactionWait _wait ) { + auto from = _from->getAddressAsString(); + auto accountNonce = _from->computeNonceForNextTx(); + u256 dstBalanceBefore; + + + if ( this->verifyTransactions ) { + CHECK( accountNonce == getTransactionCount( from ) ); + u256 srcBalanceBefore = getBalance( _from->getAddressAsString() ); + CHECK( srcBalanceBefore > 0 ); + if ( 21000 * _gasPrice + _amount > srcBalanceBefore ) { + cout << "Not enough balance to send a transfer" << endl; + cout << "Wallet:" << from << endl; + cout << "Balance:" << srcBalanceBefore << endl; + cout << "Transfer amount: " << _amount << endl; + cout << "Gas price" << _gasPrice << endl; + cout << "Missing amount:" << 21000 * _gasPrice + _amount - srcBalanceBefore << endl; + } + + CHECK( 21000 * _gasPrice + _amount <= srcBalanceBefore ); + + CHECK( srcBalanceBefore > 0 ); + CHECK( dstBalanceBefore == 0 ); + } + + Json::Value t; + t["from"] = from; + if ( _to ) { + t["to"] = from; + } + t["value"] = jsToDecimal( toJS( _amount ) ); + CHECK( _data.size() % 2 == 0 ); + t["data"] = "0x" + _data; + TransactionSkeleton ts = toTransactionSkeleton( t ); + ts.nonce = accountNonce; + ts.nonce = accountNonce; + ts.gas = 10000000; + ts.gasPrice = _gasPrice; + + Transaction transaction( ts ); // always legacy, no prefix byte + transaction.forceChainId( chainId ); + transaction.sign( _from->getKey() ); + CHECK( transaction.chainId() ); + + auto payload = getTxPayload( transaction ); + + string txHash; + + try { + // auto txHash = rpcClient()->eth_sendRawTransaction( payload ); + txHash = getThreadLocalCurlClient()->eth_sendRawTransaction( payload ); + CHECK( !txHash.empty() ); + _from->setLastTxHash( txHash ); + } catch ( std::exception& e ) { + cout << "EXCEPTION " << transaction.from() << ": nonce: " << transaction.nonce() << endl; + cout << e.what() << endl; + throw e; + } + + if ( _wait == TransactionWait::DONT_WAIT_FOR_COMPLETION ) { + // dont wait for it to finish and return immediately + return txHash; + } + + waitForTransaction( _from ); + + return txHash; + + /* + if ( this->verifyTransactions ) { + auto balanceAfter = getBalance( _to ); + CHECK( balanceAfter - dstBalanceBefore == _amount ); + } + */ +} + + +void SkaledFixture::waitForTransactionOrBatch( std::shared_ptr< SkaledAccount > _account, + uint64_t _batchSize) { + u256 transactionCount; + + auto lastSentNonce = _account->getLastSentNonce(); + + auto beginTime = getCurrentTimeMs(); + + + while ( ( transactionCount = getThreadLocalCurlClient()->eth_getTransactionCount( + _account->getAddressAsString() ) ) < lastSentNonce + 1) { + + if ( this->verifyTransactions ) { + CHECK( getTransactionCount( _account->getAddressAsString() ) == transactionCount ) + } + + if ( getCurrentTimeMs() - beginTime > transactionTimeoutMs ) { + throw runtime_error( + "Transaction was not executed in time ms: " + to_string( transactionTimeoutMs ) ); + } + // wait for a bit before checking again + usleep( 300 * this->timeBetweenTransactionCompletionChecksMs ); + } + + // the count should now be one more than the last transaction nonce + CHECK( transactionCount == lastSentNonce + 1); + + _account->notifyLastTransactionOrBatchCompleted( _batchSize); +} + +void SkaledFixture::splitAccountInHalves( std::shared_ptr< SkaledAccount > _from, + std::shared_ptr< SkaledAccount > _to, u256& _gasPrice, TransactionWait _wait ) { + auto balance = getThreadLocalCurlClient()->eth_getBalance( _from->getAddressAsString() ); + + if ( this->verifyTransactions ) { + CHECK( balance == getBalance( _from->getAddressAsString() ) ) + } + + CHECK( balance > 0 ); + auto fee = _gasPrice * 21000; + CHECK( fee <= balance ); + CHECK( balance > 0 ) + auto amount = ( balance - fee ) / 2; + + sendSingleTransfer( + amount, _from, _to->getAddressAsString(), _gasPrice, TransferType::NATIVE, _wait ); +} + + +void SkaledFixture::sendTinyTransfer( std::shared_ptr< SkaledAccount > _from, const u256& _gasPrice, + TransferType _transferType, TransactionWait _wait ) { + auto fee = _gasPrice * 21000; + + if ( this->verifyTransactions ) { + CHECK( fee <= getBalance( _from->getAddressAsString() ) ) + } + + sendSingleTransferOrBatch( 1, _from, _from->getAddressAsString(), _gasPrice, + this->mtmBatchSize, _transferType, _wait ); +} + + +unique_ptr< WebThreeStubClient > SkaledFixture::rpcClient() const { + auto httpClient = new jsonrpc::HttpClient( skaledEndpoint ); + httpClient->SetTimeout( 10000 ); + auto rpcClient = unique_ptr< WebThreeStubClient >( new WebThreeStubClient( *httpClient ) ); + return rpcClient; +} + +void SkaledFixture::calculateAndSetPowGas( Transaction& _t ) const { + + for ( u256 i = 1;; i++ ) { + _t.forceGasPrice( i ); + + h256 hash = dev::sha3( _t.sender().ref() ) ^ + dev::sha3( _t.nonce() ) ^ dev::sha3( _t.gasPrice() ); + + u256 externalGas = ~u256( 0 ) / u256( hash ) / powDiffuculty; + + if ( externalGas >= _t.gas() ) { + return; + } + } +} + +SkaledAccount::SkaledAccount( const Secret _key, const u256 _currentTransactionCountOnChain ) + : key( _key ), currentTransactionCountOnChain( _currentTransactionCountOnChain ) {} + +const Secret& SkaledAccount::getKey() const { + return key; +}; + +std::map< string, std::shared_ptr< SkaledAccount > > SkaledAccount::accounts; diff --git a/test/unittests/libweb3jsonrpc/SkaledFixture.h b/test/unittests/libweb3jsonrpc/SkaledFixture.h new file mode 100644 index 000000000..13b8a67f7 --- /dev/null +++ b/test/unittests/libweb3jsonrpc/SkaledFixture.h @@ -0,0 +1,320 @@ +/* +Modifications Copyright (C) 2024 SKALE Labs + + This file is part of cpp-ethereum. + + cpp-ethereum is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + cpp-ethereum is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with cpp-ethereum. If not, see . +*/ + +#ifndef SKALE_SKALEDFIXTURE_H +#define SKALE_SKALEDFIXTURE_H + +#include "libdevcrypto/AES.h" + + +#include +#include + +using namespace std; +using namespace dev; +using namespace dev::eth; +using namespace dev::test; + +#define CHECK( __EXPRESSION__ ) \ + if ( !( __EXPRESSION__ ) ) { \ + auto __msg__ = string( "Check failed::" ) + #__EXPRESSION__ + " " + string( __FILE__ ) + \ + ":" + to_string( __LINE__ ); \ + throw std::runtime_error( __msg__ ); \ + } + +// Callback function to handle data received from the server +size_t WriteCallback( void* contents, size_t size, size_t nmemb, void* userp ); + +enum class TransactionWait { WAIT_FOR_COMPLETION, DONT_WAIT_FOR_COMPLETION }; + +enum class TransferType { NATIVE, ERC20 }; + +class SkaledAccount { + Secret key; + u256 currentTransactionCountOnChain = 0; + std::optional< u256 > lastSentNonce = std::nullopt; + std::optional< string > lastSentTxHash = std::nullopt; + + mutable std::shared_mutex mutex; + + static std::map< string, std::shared_ptr< SkaledAccount > > accounts; + + // Grant std::make_shared access to the private constructor + friend std::shared_ptr< SkaledAccount > std::make_shared< SkaledAccount >(); + +public: + + void setLastTxHash(const string& _hash) { + std::unique_lock< std::shared_mutex > lock( mutex ); + this->lastSentTxHash = _hash; + } + + string getLastTxHash() { + std::shared_lock< std::shared_mutex > lock( mutex ); + CHECK(lastSentTxHash) + return lastSentTxHash.value(); + } + + static shared_ptr< SkaledAccount > getInstance( + const Secret key, const u256 _currentTransactionCountOnChain ) { + static std::mutex addressesMutex; + std::lock_guard< std::mutex > lock( addressesMutex ); + auto account = std::shared_ptr< SkaledAccount >( + new SkaledAccount( key, _currentTransactionCountOnChain ) ); + if ( !accounts.try_emplace( account->getAddressAsString() ).second ) { + // another object was created, so return the existing one + return accounts[account->getAddressAsString()] = account; + } else { + // return the newly created one + return account; + }; + } + + + static shared_ptr< SkaledAccount > generate() { + static std::mutex addressesMutex; + Secret newKey = KeyPair::create().secret(); + return getInstance( newKey, 0 ); + } + + + string getAddressAsString() const { return "0x" + KeyPair( key ).address().hex(); } + + + const Secret& getKey() const; + + u256 getCurrentTransactionCountOnBlockchain() const { + std::shared_lock< std::shared_mutex > lock( mutex ); + return currentTransactionCountOnChain; + } + + u256 getLastSentNonce() const { + std::shared_lock< std::shared_mutex > lock( mutex ); + if ( !lastSentNonce.has_value() ) { + throw std::runtime_error( "No transaction has been sent from this account" ); + } + return lastSentNonce.value(); + } + + + + + + // will return the next nonce that can be used for a transaction + // if it is a batch, then _batchSize transactions will be sent + u256 computeNonceForNextTransactionOrBatch(uint64_t _batchSize) { + std::unique_lock< std::shared_mutex > lock( mutex ); + + + if ( lastSentNonce.has_value() ) { + throw std::runtime_error( "Previous transaction has not yet been confirmed" ); + } + + auto nextNonce = currentTransactionCountOnChain; + + lastSentNonce = currentTransactionCountOnChain + _batchSize - 1; + + + return nextNonce; + } + + + u256 computeNonceForNextTx() { + return computeNonceForNextTransactionOrBatch( 1 ); + } + + void notifyLastTransactionOrBatchCompleted(uint64_t _batchSize) { + std::unique_lock< std::shared_mutex > lock( mutex ); + + + if ( !lastSentNonce.has_value() ) { + throw std::runtime_error( "No pending transaction for this account" ); + } + + CHECK( lastSentNonce == currentTransactionCountOnChain + _batchSize - 1); + + currentTransactionCountOnChain+= _batchSize; + + lastSentNonce = std::nullopt; + } + +private: + SkaledAccount( const Secret key, const u256 _currentTransactionCountOnChain ); + + + SkaledAccount& operator=( const SkaledAccount& ) { + // these objects should exist in a single copy per account + // thats why we use a shared pointer + throw std::runtime_error( "Copying SkaledAccount objects is not allowed" ); + } +}; + + +class SkaledFixture; + +class CurlClient { + CURL* curl; + std::string readBuffer; + struct curl_slist* headers = nullptr; + + string skaledEndpoint; + +public: + static std::atomic< uint64_t > totalCallsCount; + + static uint64_t getTotalCallsCount(); + + void resetCurl(); + CurlClient( SkaledFixture& _fixture ); + + void setRequest( const string& _json_rpc_request ); + + Json::Value doRequestResponse(); + + Json::Value parseResponse(); + + string eth_sendRawTransaction( const std::string& _rawTransactionHex ); + void doRequestResponseAndCheckForError( std::string jsonPayload, Json::Value& response ); + + + u256 eth_getBalance( const std::string& _addressString ); + + u256 eth_getTransactionCount( const std::string& _addressString ); + + Json::Value eth_getTransactionReceipt( const std::string& _hash ); + + ~CurlClient(); +}; + + +class SkaledFixture : public TestOutputHelperFixture { + static string readFile( const std::string& _path ); + + static thread_local std::shared_ptr< CurlClient > curlClient; + +public: + std::shared_ptr< CurlClient > getThreadLocalCurlClient(); + + void setupFirstKey(); + + void deployERC20(); + string checkReceiptStatusAndGetGasUsed( string _hash); + + void mintERC20(std::shared_ptr< SkaledAccount > _minter, + const string& _address, u256 _amount, u256 _gasPrice, TransactionWait _wait); + + void setupTwoToTheNKeys( uint64_t _n ); + + void doOneTinyTransfersIteration( TransferType _transferType ); + + void mintAllKeysWithERC20(); + + void sendTinyTransfersForAllAccounts( uint64_t _iterations, TransferType _transferType ); + + void readInsecurePrivateKeyFromHardhatConfig(); + + static uint64_t getCurrentTimeMs(); + + + SkaledFixture( const std::string& _configPath ); + + ~SkaledFixture() override; + + u256 getTransactionCount( const string& _address ); + + u256 getCurrentGasPrice(); + + u256 getBalance( const string& _address ) const; + + + u256 getBalance( const SkaledAccount& _account ) const; + + string getTxPayload( Transaction& _transaction); + + void sendSingleTransferOrBatch( u256 _amount, std::shared_ptr< SkaledAccount > _from, + const string& _to, const u256& _gasPrice, uint64_t _batchSize, + TransferType _transferType, TransactionWait _wait); + + void sendSingleTransfer( u256 _amount, std::shared_ptr< SkaledAccount > _from, + const string& _to, const u256& _gasPrice, TransferType _transferType, TransactionWait _wait) { + sendSingleTransferOrBatch( _amount, _from, _to, _gasPrice, 1, _transferType, _wait ); + } + + string sendSingleDeployOrSolidityCall( u256 _amount, std::shared_ptr< SkaledAccount > _from, + std::optional< string > _to, const string& _data, const u256& _gasPrice, + TransactionWait _wait); + + + void splitAccountInHalves( std::shared_ptr< SkaledAccount > _from, + std::shared_ptr< SkaledAccount > _to, u256& _gasPrice, TransactionWait _wait); + + + void sendTinyTransfer( std::shared_ptr< SkaledAccount > _from, const u256& _gasPrice, + TransferType _transferType, TransactionWait _wait); + + + unique_ptr< WebThreeStubClient > rpcClient() const; + + + void calculateAndSetPowGas(Transaction& _t) const; + + string skaledEndpoint; + string ownerAddressStr; + string ip; + uint64_t basePort; + uint64_t chainId; + std::shared_ptr< SkaledAccount > ownerAccount; + // map of test key addresses to secret keys + map< string, std::shared_ptr< SkaledAccount > > testAccounts; + vector< shared_ptr< SkaledAccount > > testAccountsVector; + string erc20ContractAddress; + + + const string HARDHAT_CONFIG_FILE_NAME = "../../test/historicstate/hardhat/hardhat.config.js"; + uint64_t transactionTimeoutMs = 60000; + bool usePow = false; + u256 powDiffuculty = 1; + bool verifyTransactions = false; + bool useThreadsForTestKeyCreation = false; + uint64_t mtmBatchSize = 1; + + uint64_t threadsCountForTestTransactions = 1; + TransactionType transactionType = TransactionType::Legacy; + + + void waitForTransactionOrBatch( std::shared_ptr< SkaledAccount > _account, + uint64_t _batchSize); + + void waitForTransaction( std::shared_ptr< SkaledAccount > _account ) { + waitForTransactionOrBatch( _account, 1 ); + } + + + + int timeBetweenTransactionCompletionChecksMs = 1000; + + // Keccak-256("mint(address,uint256)") + const string MINT_FUNCTION_SELECTOR = "6a627842"; + + // Keccak-256("transfer(address,uint256)") + const string TRANSFER_FUNCTION_SELECTOR = "4b40e901"; +}; + + +#endif // SKALE_SKALEDFIXTURE_H diff --git a/test/unittests/libweb3jsonrpc/contracts/ERC20.sol b/test/unittests/libweb3jsonrpc/contracts/ERC20.sol new file mode 100644 index 000000000..09a8293cf --- /dev/null +++ b/test/unittests/libweb3jsonrpc/contracts/ERC20.sol @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.26; + + +interface IERC20 { + function totalSupply() external view returns (uint256); + function balanceOf(address account) external view returns (uint256); + function transfer(address recipient, uint256 amount) + external + returns (bool); + function allowance(address owner, address spender) + external + view + returns (uint256); + function approve(address spender, uint256 amount) external returns (bool); + function transferFrom(address sender, address recipient, uint256 amount) + external + returns (bool); +} + + +contract ERC20 is IERC20 { + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval( + address indexed owner, address indexed spender, uint256 value + ); + + uint256 public totalSupply; + mapping(address => uint256) public balanceOf; + mapping(address => mapping(address => uint256)) public allowance; + string public name = "SKALE Test"; + string public symbol = "SKL"; + uint8 public decimals = 18; + + + + function transfer(address recipient, uint256 amount) + external + returns (bool) + { + balanceOf[msg.sender] -= amount; + balanceOf[recipient] += amount; + emit Transfer(msg.sender, recipient, amount); + return true; + } + + function approve(address spender, uint256 amount) external returns (bool) { + allowance[msg.sender][spender] = amount; + emit Approval(msg.sender, spender, amount); + return true; + } + + function transferFrom(address sender, address recipient, uint256 amount) + external + returns (bool) + { + allowance[sender][msg.sender] -= amount; + balanceOf[sender] -= amount; + balanceOf[recipient] += amount; + emit Transfer(sender, recipient, amount); + return true; + } + + function _mint(address to, uint256 amount) internal { + balanceOf[to] += amount; + totalSupply += amount; + emit Transfer(address(0), to, amount); + } + + function _burn(address from, uint256 amount) internal { + balanceOf[from] -= amount; + totalSupply -= amount; + emit Transfer(from, address(0), amount); + } + + function mint(address to, uint256 amount) external { + _mint(to, amount); + } + + function burn(address from, uint256 amount) external { + _burn(from, amount); + } +} \ No newline at end of file diff --git a/test/unittests/libweb3jsonrpc/contracts/ERC20_abi.json b/test/unittests/libweb3jsonrpc/contracts/ERC20_abi.json new file mode 100644 index 000000000..47f22cc58 --- /dev/null +++ b/test/unittests/libweb3jsonrpc/contracts/ERC20_abi.json @@ -0,0 +1,260 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/test/unittests/libweb3jsonrpc/contracts/ERC20_bytecode.txt b/test/unittests/libweb3jsonrpc/contracts/ERC20_bytecode.txt new file mode 100644 index 000000000..e85fa78e8 --- /dev/null +++ b/test/unittests/libweb3jsonrpc/contracts/ERC20_bytecode.txt @@ -0,0 +1 @@ +60806040526040518060400160405280600a81526020017f534b414c452054657374000000000000000000000000000000000000000000008152506003908161004891906102f7565b506040518060400160405280600381526020017f534b4c00000000000000000000000000000000000000000000000000000000008152506004908161008d91906102f7565b50601260055f6101000a81548160ff021916908360ff1602179055503480156100b4575f5ffd5b506103c6565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061013557607f821691505b602082108103610148576101476100f1565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261016f565b6101b4868361016f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6101f86101f36101ee846101cc565b6101d5565b6101cc565b9050919050565b5f819050919050565b610211836101de565b61022561021d826101ff565b84845461017b565b825550505050565b5f5f905090565b61023c61022d565b610247818484610208565b505050565b5b8181101561026a5761025f5f82610234565b60018101905061024d565b5050565b601f8211156102af576102808161014e565b61028984610160565b81016020851015610298578190505b6102ac6102a485610160565b83018261024c565b50505b505050565b5f82821c905092915050565b5f6102cf5f19846008026102b4565b1980831691505092915050565b5f6102e783836102c0565b9150826002028217905092915050565b610300826100ba565b67ffffffffffffffff811115610319576103186100c4565b5b610323825461011e565b61032e82828561026e565b5f60209050601f83116001811461035f575f841561034d578287015190505b61035785826102dc565b8655506103be565b601f19841661036d8661014e565b5f5b828110156103945784890151825560018201915060208501945060208101905061036f565b868310156103b157848901516103ad601f8916826102c0565b8355505b6001600288020188555050505b505050505050565b610ce6806103d35f395ff3fe608060405234801561000f575f5ffd5b50600436106100a7575f3560e01c806340c10f191161006f57806340c10f191461016557806370a082311461018157806395d89b41146101b15780639dc29fac146101cf578063a9059cbb146101eb578063dd62ed3e1461021b576100a7565b806306fdde03146100ab578063095ea7b3146100c957806318160ddd146100f957806323b872dd14610117578063313ce56714610147575b5f5ffd5b6100b361024b565b6040516100c09190610989565b60405180910390f35b6100e360048036038101906100de9190610a3a565b6102d7565b6040516100f09190610a92565b60405180910390f35b6101016103c4565b60405161010e9190610aba565b60405180910390f35b610131600480360381019061012c9190610ad3565b6103c9565b60405161013e9190610a92565b60405180910390f35b61014f61056e565b60405161015c9190610b3e565b60405180910390f35b61017f600480360381019061017a9190610a3a565b610580565b005b61019b60048036038101906101969190610b57565b61058e565b6040516101a89190610aba565b60405180910390f35b6101b96105a3565b6040516101c69190610989565b60405180910390f35b6101e960048036038101906101e49190610a3a565b61062f565b005b61020560048036038101906102009190610a3a565b61063d565b6040516102129190610a92565b60405180910390f35b61023560048036038101906102309190610b82565b610753565b6040516102429190610aba565b60405180910390f35b6003805461025890610bed565b80601f016020809104026020016040519081016040528092919081815260200182805461028490610bed565b80156102cf5780601f106102a6576101008083540402835291602001916102cf565b820191905f5260205f20905b8154815290600101906020018083116102b257829003601f168201915b505050505081565b5f8160025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103b29190610aba565b60405180910390a36001905092915050565b5f5481565b5f8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546104519190610c4a565b925050819055508160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546104a49190610c4a565b925050819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546104f79190610c7d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161055b9190610aba565b60405180910390a3600190509392505050565b60055f9054906101000a900460ff1681565b61058a8282610773565b5050565b6001602052805f5260405f205f915090505481565b600480546105b090610bed565b80601f01602080910402602001604051908101604052809291908181526020018280546105dc90610bed565b80156106275780601f106105fe57610100808354040283529160200191610627565b820191905f5260205f20905b81548152906001019060200180831161060a57829003601f168201915b505050505081565b6106398282610846565b5050565b5f8160015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461068a9190610c4a565b925050819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546106dd9190610c7d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107419190610aba565b60405180910390a36001905092915050565b6002602052815f5260405f20602052805f5260405f205f91509150505481565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107bf9190610c7d565b92505081905550805f5f8282546107d69190610c7d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161083a9190610aba565b60405180910390a35050565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108929190610c4a565b92505081905550805f5f8282546108a99190610c4a565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161090d9190610aba565b60405180910390a35050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61095b82610919565b6109658185610923565b9350610975818560208601610933565b61097e81610941565b840191505092915050565b5f6020820190508181035f8301526109a18184610951565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6109d6826109ad565b9050919050565b6109e6816109cc565b81146109f0575f5ffd5b50565b5f81359050610a01816109dd565b92915050565b5f819050919050565b610a1981610a07565b8114610a23575f5ffd5b50565b5f81359050610a3481610a10565b92915050565b5f5f60408385031215610a5057610a4f6109a9565b5b5f610a5d858286016109f3565b9250506020610a6e85828601610a26565b9150509250929050565b5f8115159050919050565b610a8c81610a78565b82525050565b5f602082019050610aa55f830184610a83565b92915050565b610ab481610a07565b82525050565b5f602082019050610acd5f830184610aab565b92915050565b5f5f5f60608486031215610aea57610ae96109a9565b5b5f610af7868287016109f3565b9350506020610b08868287016109f3565b9250506040610b1986828701610a26565b9150509250925092565b5f60ff82169050919050565b610b3881610b23565b82525050565b5f602082019050610b515f830184610b2f565b92915050565b5f60208284031215610b6c57610b6b6109a9565b5b5f610b79848285016109f3565b91505092915050565b5f5f60408385031215610b9857610b976109a9565b5b5f610ba5858286016109f3565b9250506020610bb6858286016109f3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610c0457607f821691505b602082108103610c1757610c16610bc0565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610c5482610a07565b9150610c5f83610a07565b9250828203905081811115610c7757610c76610c1d565b5b92915050565b5f610c8782610a07565b9150610c9283610a07565b9250828201905080821115610caa57610ca9610c1d565b5b9291505056fea264697066735822122051fb5fd50a178465e8e53160107032d89e41ab5e7c9258304451655a4413776664736f6c634300081b0033 \ No newline at end of file diff --git a/test/unittests/libweb3jsonrpc/contracts/compile.py b/test/unittests/libweb3jsonrpc/contracts/compile.py new file mode 100644 index 000000000..6b1371d3f --- /dev/null +++ b/test/unittests/libweb3jsonrpc/contracts/compile.py @@ -0,0 +1,82 @@ +# You need solc preinstalled +# sudo add-apt-repository ppa:ethereum/ethereum +# x` + + +import subprocess +import json +import os + + +current_directory = os.getcwd() +print(f"Current Working Directory: {current_directory}") + +SOLC_PATH="/usr/bin/solc" # Path to Solidity compiler +ERC20_SOURCE_FILE = current_directory + '/ERC20.sol' # Solidity source file + +def compile_contract(source_file): + + + + try: + # Compile the contract using solc executable + result = subprocess.run( + [SOLC_PATH, '--combined-json', 'abi,bin', source_file], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True + ) + + # Check for compilation errors + if result.returncode != 0: + print(f"Error compiling contract: {result.stderr}") + return None, None + + # Load the JSON output + compiled_output = json.loads(result.stdout) + + # Extract contract data + contract_name = source_file.split('/')[-1] + ':ERC20' + abi = compiled_output['contracts'][contract_name]['abi'] + bytecode = compiled_output['contracts'][contract_name]['bin'] + + return abi, bytecode + + except Exception as e: + print(f"Exception during contract compilation: {e}") + return None, None + +def write_to_file(filename, data): + """ + Writes data to a file. + + :param filename: Name of the file to write to. + :param data: Data to write. + """ + try: + with open(filename, 'w') as file: + file.write(data) + print(f"Data written to {filename}") + except IOError as e: + print(f"Error writing to {filename}: {e}") + +def main(): + # Define paths and filenames + + abi_file = 'ERC20_abi.json' # Output file for ABI + bytecode_file = 'ERC20_bytecode.txt' # Output file for Bytecode + + # Compile the contract + abi, bytecode = compile_contract(ERC20_SOURCE_FILE) + + # Check if compilation was successful + if abi is None or bytecode is None: + print("Compilation failed.") + return + + # Write ABI and Bytecode to files + write_to_file(abi_file, json.dumps(abi, indent=4)) + write_to_file(bytecode_file, bytecode) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/test/unittests/libweb3jsonrpc/jsonrpc.cpp b/test/unittests/libweb3jsonrpc/jsonrpc.cpp index 948b90ec3..e7dc74d18 100644 --- a/test/unittests/libweb3jsonrpc/jsonrpc.cpp +++ b/test/unittests/libweb3jsonrpc/jsonrpc.cpp @@ -21,8 +21,11 @@ #include "WebThreeStubClient.h" -#include + +#include "genesisGeneration2Config.h" +#include "libweb3jsonrpc/SkaleFace.h" #include +#include #include #include #include @@ -30,12 +33,13 @@ #include #include #include -#include -#include #include #include #include #include +#include "SkaledFixture.h" +#include +#include #include "genesisGeneration2Config.h" #include #include @@ -43,26 +47,24 @@ #include #include #include +#include #include #include -#include +#include #include -#include - -#include -#include #include // This is defined by some weird windows header - workaround for now. #undef GetMessage + using namespace std; using namespace dev; using namespace dev::eth; using namespace dev::test; -static size_t rand_port = ( srand(time(nullptr)), 1024 + rand() % 64000 ); +static size_t rand_port = ( srand( time( nullptr ) ), 1024 + rand() % 64000 ); static std::string const c_genesisConfigString = R"( @@ -97,7 +99,8 @@ static std::string const c_genesisConfigString = "nodeName": "Node1", "nodeID": 1112, "bindIP": "127.0.0.1", - "basePort": )"+std::to_string( rand_port ) + R"(, + "basePort": )" + + std::to_string( rand_port ) + R"(, "logLevel": "trace", "logLevelProposal": "trace", "testSignatures": true @@ -109,7 +112,9 @@ static std::string const c_genesisConfigString = "emptyBlockIntervalMs": -1, "nodeGroups": {}, "nodes": [ - { "nodeID": 1112, "ip": "127.0.0.1", "basePort": )"+std::to_string( rand_port ) + R"(, "schainIndex" : 1, "publicKey": "0xfa"} + { "nodeID": 1112, "ip": "127.0.0.1", "basePort": )" + + std::to_string( rand_port ) + + R"(, "schainIndex" : 1, "publicKey": "0xfa"} ], "revertableFSPatchTimestamp": 0, "contractStorageZeroValuePatchTimestamp": 0, @@ -132,28 +137,28 @@ static std::string const c_genesisConfigString = } },)" /* - pragma solidity ^0.4.25; - contract Caller { - function call() public { - bool status; - string memory fileName = "test"; - address sender = 0x000000000000000000000000000000AA; - assembly{ - let ptr := mload(0x40) - mstore(ptr, sender) - mstore(add(ptr, 0x20), 4) - mstore(add(ptr, 0x40), mload(add(fileName, 0x20))) - mstore(add(ptr, 0x60), 1) - status := call(not(0), 0x05, 0, ptr, 0x80, ptr, 32) - } - } +pragma solidity ^0.4.25; +contract Caller { +function call() public { +bool status; +string memory fileName = "test"; +address sender = 0x000000000000000000000000000000AA; +assembly{ +let ptr := mload(0x40) +mstore(ptr, sender) +mstore(add(ptr, 0x20), 4) +mstore(add(ptr, 0x40), mload(add(fileName, 0x20))) +mstore(add(ptr, 0x60), 1) +status := call(not(0), 0x05, 0, ptr, 0x80, ptr, 32) +} +} - function revertCall() public { - call(); - revert(); - } - } - */ +function revertCall() public { +call(); +revert(); +} +} +*/ R"("0000000000000000000000000000000000000006": { "precompiled": { "name": "addBalance", @@ -226,7 +231,9 @@ namespace { class TestIpcServer : public jsonrpc::AbstractServerConnector { public: bool StartListening() override { return true; } + bool StopListening() override { return true; } + bool SendResponse( std::string const& _response, void* _addInfo = nullptr ) /*override*/ { *static_cast< std::string* >( _addInfo ) = _response; return true; @@ -235,7 +242,7 @@ class TestIpcServer : public jsonrpc::AbstractServerConnector { class TestIpcClient : public jsonrpc::IClientConnector { public: - explicit TestIpcClient( TestIpcServer& _server ) : m_server{_server} {} + explicit TestIpcClient( TestIpcServer& _server ) : m_server{ _server } {} void SendRPCMessage( const std::string& _message, std::string& _result ) override { m_server.ProcessRequest( _message, _result ); @@ -246,30 +253,30 @@ class TestIpcClient : public jsonrpc::IClientConnector { }; struct JsonRpcFixture : public TestOutputHelperFixture { - -// chain params needs to be a field of JsonRPCFixture -// since references to it are passed to the server -ChainParams chainParams; - - -JsonRpcFixture( const std::string& _config = "", bool _owner = true, - bool _deploymentControl = true, bool _generation2 = false, - bool _mtmEnabled = false, bool _isSyncNode = false, int _emptyBlockIntervalMs = -1, - const std::map& params = std::map() ) { + // chain params needs to be a field of JsonRPCFixture + // since references to it are passed to the server + ChainParams chainParams; + JsonRpcFixture( const std::string& _config = "", bool _owner = true, + bool _deploymentControl = true, bool _generation2 = false, bool _mtmEnabled = false, + bool _isSyncNode = false, int _emptyBlockIntervalMs = -1, + const std::map< std::string, std::string >& params = + std::map< std::string, std::string >() ) { if ( _config != "" ) { if ( !_generation2 ) { Json::Value ret; Json::Reader().parse( _config, ret ); if ( _owner ) { ret["skaleConfig"]["sChain"]["schainOwner"] = toJS( coinbase.address() ); - if (_deploymentControl) - ret["accounts"]["0xD2002000000000000000000000000000000000D2"]["storage"]["0x0"] = toJS( coinbase.address() ); + if ( _deploymentControl ) + ret["accounts"]["0xD2002000000000000000000000000000000000D2"]["storage"] + ["0x0"] = toJS( coinbase.address() ); } else { ret["skaleConfig"]["sChain"]["schainOwner"] = toJS( account2.address() ); - if (_deploymentControl) - ret["accounts"]["0xD2002000000000000000000000000000000000D2"]["storage"]["0x0"] = toJS( account2.address() ); + if ( _deploymentControl ) + ret["accounts"]["0xD2002000000000000000000000000000000000D2"]["storage"] + ["0x0"] = toJS( account2.address() ); } Json::FastWriter fastWriter; std::string output = fastWriter.write( ret ); @@ -278,8 +285,10 @@ JsonRpcFixture( const std::string& _config = "", bool _owner = true, chainParams = chainParams.loadConfig( _config ); // insecure schain owner(originator) private key // address is 0x5C4e11842E8be09264dc1976943571d7Af6d00F9 - coinbase = dev::KeyPair(dev::Secret("0x1c2cd4b70c2b8c6cd7144bbbfbd1e5c6eacb4a5efd9c86d0e29cbbec4e8483b9")); - account3 = dev::KeyPair(dev::Secret("0x23ABDBD3C61B5330AF61EBE8BEF582F4E5CC08E554053A718BDCE7813B9DC1FC")); + coinbase = dev::KeyPair( dev::Secret( + "0x1c2cd4b70c2b8c6cd7144bbbfbd1e5c6eacb4a5efd9c86d0e29cbbec4e8483b9" ) ); + account3 = dev::KeyPair( dev::Secret( + "0x23ABDBD3C61B5330AF61EBE8BEF582F4E5CC08E554053A718BDCE7813B9DC1FC" ) ); } } else { chainParams.sealEngineName = NoProof::name(); @@ -293,13 +302,20 @@ JsonRpcFixture( const std::string& _config = "", bool _owner = true, chainParams.externalGasDifficulty = 1; chainParams.sChain.contractStorageLimit = 128; // 615 + 1430 is experimentally-derived block size + average extras size - chainParams.sChain.dbStorageLimit = 320.5*( 615 + 1430 ); - chainParams.sChain._patchTimestamps[static_cast(SchainPatchEnum::ContractStoragePatch)] = 1; - chainParams.sChain._patchTimestamps[static_cast(SchainPatchEnum::StorageDestructionPatch)] = 1; - powPatchActivationTimestamp = time(nullptr) + 60; - chainParams.sChain._patchTimestamps[static_cast(SchainPatchEnum::CorrectForkInPowPatch)] = powPatchActivationTimestamp; - push0PatchActivationTimestamp = time(nullptr) + 10; - chainParams.sChain._patchTimestamps[static_cast(SchainPatchEnum::PushZeroPatch)] = push0PatchActivationTimestamp; + chainParams.sChain.dbStorageLimit = 320.5 * ( 615 + 1430 ); + chainParams.sChain + ._patchTimestamps[static_cast< size_t >( SchainPatchEnum::ContractStoragePatch )] = + 1; + chainParams.sChain._patchTimestamps[static_cast< size_t >( + SchainPatchEnum::StorageDestructionPatch )] = 1; + powPatchActivationTimestamp = time( nullptr ) + 60; + chainParams.sChain + ._patchTimestamps[static_cast< size_t >( SchainPatchEnum::CorrectForkInPowPatch )] = + powPatchActivationTimestamp; + push0PatchActivationTimestamp = time( nullptr ) + 10; + chainParams.sChain + ._patchTimestamps[static_cast< size_t >( SchainPatchEnum::PushZeroPatch )] = + push0PatchActivationTimestamp; chainParams.sChain.emptyBlockIntervalMs = _emptyBlockIntervalMs; // add random extra data to randomize genesis hash and get random DB path, // so that tests can be run in parallel @@ -309,7 +325,7 @@ JsonRpcFixture( const std::string& _config = "", bool _owner = true, chainParams.sChain.nodes[0].port = chainParams.sChain.nodes[0].port6 = rand_port; chainParams.skaleDisableChainIdCheck = true; - if( params.count("getLogsBlocksLimit") && stoi( params.at( "getLogsBlocksLimit" ) ) ) + if ( params.count( "getLogsBlocksLimit" ) && stoi( params.at( "getLogsBlocksLimit" ) ) ) chainParams.getLogsBlocksLimit = stoi( params.at( "getLogsBlocksLimit" ) ); } chainParams.sChain.multiTransactionMode = _mtmEnabled; @@ -317,7 +333,8 @@ JsonRpcFixture( const std::string& _config = "", bool _owner = true, auto monitor = make_shared< InstanceMonitor >("test"); - setenv("DATA_DIR", tempDir.path().c_str(), 1); + + setenv( "DATA_DIR", tempDir.path().c_str(), 1 ); client.reset( new eth::ClientTest( chainParams, ( int ) chainParams.networkID, shared_ptr< GasPricer >(), NULL, monitor, tempDir.path(), WithExisting::Kill ) ); @@ -326,9 +343,7 @@ JsonRpcFixture( const std::string& _config = "", bool _owner = true, // wait for 1st block - because it's always empty std::promise< void > blockPromise; auto importHandler = client->setOnBlockImport( - [&blockPromise]( BlockHeader const& ) { - blockPromise.set_value(); - } ); + [&blockPromise]( BlockHeader const& ) { blockPromise.set_value(); } ); client->injectSkaleHost(); client->startWorking(); @@ -345,22 +360,23 @@ JsonRpcFixture( const std::string& _config = "", bool _owner = true, rpc::AdminEthFace /*, rpc::AdminNetFace*/, rpc::DebugFace, rpc::TestFace >; accountHolder.reset( new FixedAccountHolder( [&]() { return client.get(); }, {} ) ); - accountHolder->setAccounts( {coinbase, account2, account3} ); + accountHolder->setAccounts( { coinbase, account2, account3 } ); sessionManager.reset( new rpc::SessionManager() ); adminSession = - sessionManager->newSession( rpc::SessionPermissions{{rpc::Privilege::Admin}} ); + sessionManager->newSession( rpc::SessionPermissions{ { rpc::Privilege::Admin } } ); - auto ethFace = new rpc::Eth( std::string(""), *client, *accountHolder.get() ); + auto ethFace = new rpc::Eth( std::string( "" ), *client, *accountHolder.get() ); gasPricer = make_shared< eth::TrivialGasPricer >( 0, DefaultGasPrice ); - rpcServer.reset( new FullServer( ethFace , new rpc::Net( chainParams ), + rpcServer.reset( new FullServer( ethFace, new rpc::Net( chainParams ), new rpc::Web3(), // TODO Add version parameter here? new rpc::AdminEth( *client, *gasPricer, keyManager, *sessionManager ), new rpc::Debug( *client, nullptr, ""), new rpc::Test( *client ) ) ); + // SkaleServerOverride::opts_t serverOpts; @@ -369,29 +385,31 @@ JsonRpcFixture( const std::string& _config = "", bool _owner = true, serverOpts.netOpts_.bindOptsStandard_.cntServers_ = 1; serverOpts.netOpts_.bindOptsStandard_.strAddrHTTP4_ = chainParams.nodeInfo.ip; // random port - // +3 because rand() seems to be called effectively simultaneously here and in "static" section - thus giving same port for consensus + // +3 because rand() seems to be called effectively simultaneously here and in "static" + // section - thus giving same port for consensus serverOpts.netOpts_.bindOptsStandard_.nBasePortHTTP4_ = std::rand() % 64000 + 1025 + 3; std::cout << "PORT: " << serverOpts.netOpts_.bindOptsStandard_.nBasePortHTTP4_ << std::endl; skale_server_connector = new SkaleServerOverride( chainParams, client.get(), serverOpts ); rpcServer->addConnector( skale_server_connector ); skale_server_connector->StartListening(); - sleep(1); - - auto client = new jsonrpc::HttpClient( "http://" + chainParams.nodeInfo.ip + ":" + std::to_string( serverOpts.netOpts_.bindOptsStandard_.nBasePortHTTP4_ ) ); - client->SetTimeout(1000000000); + sleep( 1 ); - rpcClient = unique_ptr< WebThreeStubClient >( new WebThreeStubClient( *client ) ); + auto httpClient = new jsonrpc::HttpClient( + "http://" + chainParams.nodeInfo.ip + ":" + + std::to_string( serverOpts.netOpts_.bindOptsStandard_.nBasePortHTTP4_ ) ); + httpClient->SetTimeout( 1000000000 ); + rpcClient = unique_ptr< WebThreeStubClient >( new WebThreeStubClient( *httpClient ) ); - BOOST_TEST_MESSAGE("Constructed JsonRpcFixture"); + BOOST_TEST_MESSAGE( "Constructed JsonRpcFixture" ); } ~JsonRpcFixture() { if ( skale_server_connector ) skale_server_connector->StopListening(); - BOOST_TEST_MESSAGE("Destructed JsonRpcFixture"); + BOOST_TEST_MESSAGE( "Destructed JsonRpcFixture" ); } string sendingRawShouldFail( string const& _t ) { @@ -414,16 +432,16 @@ JsonRpcFixture( const std::string& _config = "", bool _owner = true, return string(); } - TransientDirectory tempDir; // ! should exist before client! + TransientDirectory tempDir; // ! should exist before client! unique_ptr< Client > client; - dev::KeyPair coinbase{KeyPair::create()}; - dev::KeyPair account2{KeyPair::create()}; - dev::KeyPair account3{KeyPair::create()}; + dev::KeyPair coinbase{ KeyPair::create() }; + dev::KeyPair account2{ KeyPair::create() }; + dev::KeyPair account3{ KeyPair::create() }; unique_ptr< FixedAccountHolder > accountHolder; unique_ptr< rpc::SessionManager > sessionManager; std::shared_ptr< eth::TrivialGasPricer > gasPricer; - KeyManager keyManager{KeyManager::defaultPath(), SecretStore::defaultPath()}; + KeyManager keyManager{ KeyManager::defaultPath(), SecretStore::defaultPath() }; unique_ptr< ModularServer<> > rpcServer; unique_ptr< WebThreeStubClient > rpcClient; std::string adminSession; @@ -433,7 +451,8 @@ JsonRpcFixture( const std::string& _config = "", bool _owner = true, }; struct RestrictedAddressFixture : public JsonRpcFixture { - RestrictedAddressFixture( const std::string& _config = c_genesisConfigString ) : JsonRpcFixture( _config ) { + RestrictedAddressFixture( const std::string& _config = c_genesisConfigString ) + : JsonRpcFixture( _config ) { ownerAddress = Address( "00000000000000000000000000000000000000AA" ); std::string fileName = "test"; path = dev::getDataDir() / "filestorage" / Address( ownerAddress ).hex() / fileName; @@ -467,10 +486,11 @@ BOOST_AUTO_TEST_CASE( jsonrpc_gasPrice ) { BOOST_CHECK_EQUAL( gasPrice, toJS( 20 * dev::eth::shannon ) ); } + BOOST_AUTO_TEST_CASE( jsonrpc_accounts, *boost::unit_test::precondition( dev::test::run_not_express ) ) { JsonRpcFixture fixture; - std::vector< dev::KeyPair > keys = {KeyPair::create(), KeyPair::create()}; + std::vector< dev::KeyPair > keys = { KeyPair::create(), KeyPair::create() }; fixture.accountHolder->setAccounts( keys ); Json::Value k = fixture.rpcClient->eth_accounts(); fixture.accountHolder->setAccounts( {} ); @@ -494,6 +514,7 @@ BOOST_AUTO_TEST_CASE( jsonrpc_number ) { BOOST_CHECK_EQUAL( numberAfter, fixture.client->number() ); } + BOOST_AUTO_TEST_CASE( jsonrpc_netVersion ) { std::string _config = c_genesisConfigString; @@ -528,8 +549,8 @@ BOOST_AUTO_TEST_CASE( jsonrpc_stateAt ) { BOOST_CHECK_EQUAL( fixture.client->stateAt( address, 0 ), jsToU256( stateAt ) ); } -BOOST_AUTO_TEST_CASE( eth_coinbase, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { +BOOST_AUTO_TEST_CASE( + eth_coinbase, *boost::unit_test::precondition( dev::test::run_not_express ) ) { JsonRpcFixture fixture; string coinbase = fixture.rpcClient->eth_coinbase(); BOOST_REQUIRE_EQUAL( jsToAddress( coinbase ), fixture.client->author() ); @@ -673,7 +694,7 @@ BOOST_AUTO_TEST_CASE( eth_sendRawTransaction_errorInvalidNonce, fixture.sendingRawShouldFail( signedTx["raw"].asString() ), "Invalid transaction nonce." ); } -BOOST_AUTO_TEST_CASE( eth_sendRawTransaction_errorInsufficientGas ) { + BOOST_AUTO_TEST_CASE( eth_sendRawTransaction_errorInsufficientGas ) { JsonRpcFixture fixture; auto senderAddress = fixture.coinbase.address(); auto receiver = KeyPair::create(); @@ -730,6 +751,7 @@ BOOST_AUTO_TEST_CASE( eth_sendRawTransaction_errorDuplicateTransaction ) { BOOST_CHECK_EQUAL( fixture.sendingRawShouldFail( signedTx["raw"].asString() ), "Same transaction already exists in the pending transaction queue." ); + } BOOST_AUTO_TEST_CASE( send_raw_tx_sync ) { @@ -756,13 +778,13 @@ BOOST_AUTO_TEST_CASE( send_raw_tx_sync ) { create["code"] = compiled; create["gas"] = "180000"; - BOOST_REQUIRE( fixture.client->transactionQueueStatus().current == 0); + BOOST_REQUIRE( fixture.client->transactionQueueStatus().current == 0 ); // Sending tx to sync node string txHash = fixture.rpcClient->eth_sendTransaction( create ); auto pendingTransactions = fixture.client->pending(); - BOOST_REQUIRE( pendingTransactions.size() == 1); + BOOST_REQUIRE( pendingTransactions.size() == 1 ); auto txHashFromQueue = "0x" + pendingTransactions[0].sha3().hex(); BOOST_REQUIRE( txHashFromQueue == txHash ); } @@ -792,6 +814,16 @@ BOOST_AUTO_TEST_CASE( eth_signTransaction ) { BOOST_CHECK_EQUAL( countAtBeforeSign, countAtAfterSign ); } + + +const string skaledConfigFileName = "../../test/historicstate/configs/basic_config.json"; + + + + + + + BOOST_AUTO_TEST_CASE( simple_contract ) { JsonRpcFixture fixture; dev::eth::simulateMining( *( fixture.client ), 1 ); @@ -857,7 +889,8 @@ BOOST_AUTO_TEST_CASE( simple_contract ) { Json::Value inputCall; inputCall["to"] = contractAddress; - inputCall["input"] = "0xb3de648b0000000000000000000000000000000000000000000000000000000000000001"; + inputCall["input"] = + "0xb3de648b0000000000000000000000000000000000000000000000000000000000000001"; inputCall["gas"] = "1000000"; inputCall["gasPrice"] = "0"; result = fixture.rpcClient->eth_call( inputCall, "latest" ); @@ -876,6 +909,7 @@ BOOST_AUTO_TEST_CASE( simple_contract ) { inputTx["to"] = contractAddress; inputTx["input"] = "0x552410770000000000000000000000000000000000000000000000000000000000000002"; txHash = fixture.rpcClient->eth_sendTransaction( inputTx ); + dev::eth::mineTransaction( *( fixture.client ), 1 ); res = fixture.rpcClient->eth_getTransactionReceipt( txHash ); BOOST_REQUIRE_EQUAL( res["status"], string( "0x1" ) ); @@ -961,7 +995,7 @@ BOOST_AUTO_TEST_CASE( deploy_contract_without_controller ) { std::string _config = c_genesisConfigString; Json::Value ret; Json::Reader().parse( _config, ret ); - ret["accounts"].removeMember("0xD2002000000000000000000000000000000000D2"); + ret["accounts"].removeMember( "0xD2002000000000000000000000000000000000D2" ); Json::FastWriter fastWriter; std::string config = fastWriter.write( ret ); JsonRpcFixture fixture( config, false, false ); @@ -975,14 +1009,14 @@ BOOST_AUTO_TEST_CASE( deploy_contract_without_controller ) { // } string compiled = - "6080604052341561000f57600080fd5b60b98061001d6000396000f300" - "608060405260043610603f576000357c01000000000000000000000000" - "00000000000000000000000000000000900463ffffffff168063b3de64" - "8b146044575b600080fd5b3415604e57600080fd5b606a600480360381" - "019080803590602001909291905050506080565b604051808281526020" - "0191505060405180910390f35b60006007820290509190505600a16562" - "7a7a72305820f294e834212334e2978c6dd090355312a3f0f9476b8eb9" - "8fb480406fc2728a960029"; + "6080604052341561000f57600080fd5b60b98061001d6000396000f300" + "608060405260043610603f576000357c01000000000000000000000000" + "00000000000000000000000000000000900463ffffffff168063b3de64" + "8b146044575b600080fd5b3415604e57600080fd5b606a600480360381" + "019080803590602001909291905050506080565b604051808281526020" + "0191505060405180910390f35b60006007820290509190505600a16562" + "7a7a72305820f294e834212334e2978c6dd090355312a3f0f9476b8eb9" + "8fb480406fc2728a960029"; Json::Value create; @@ -997,7 +1031,7 @@ BOOST_AUTO_TEST_CASE( deploy_contract_without_controller ) { BOOST_REQUIRE_EQUAL( receipt["status"], string( "0x1" ) ); BOOST_REQUIRE( !receipt["contractAddress"].isNull() ); Json::Value code = - fixture.rpcClient->eth_getCode( receipt["contractAddress"].asString(), "latest" ); + fixture.rpcClient->eth_getCode( receipt["contractAddress"].asString(), "latest" ); BOOST_REQUIRE( code.asString().substr( 2 ) == compiled.substr( 58 ) ); } @@ -1013,14 +1047,14 @@ BOOST_AUTO_TEST_CASE( deploy_contract_with_controller ) { // } string compiled = - "6080604052341561000f57600080fd5b60b98061001d6000396000f300" - "608060405260043610603f576000357c01000000000000000000000000" - "00000000000000000000000000000000900463ffffffff168063b3de64" - "8b146044575b600080fd5b3415604e57600080fd5b606a600480360381" - "019080803590602001909291905050506080565b604051808281526020" - "0191505060405180910390f35b60006007820290509190505600a16562" - "7a7a72305820f294e834212334e2978c6dd090355312a3f0f9476b8eb9" - "8fb480406fc2728a960029"; + "6080604052341561000f57600080fd5b60b98061001d6000396000f300" + "608060405260043610603f576000357c01000000000000000000000000" + "00000000000000000000000000000000900463ffffffff168063b3de64" + "8b146044575b600080fd5b3415604e57600080fd5b606a600480360381" + "019080803590602001909291905050506080565b604051808281526020" + "0191505060405180910390f35b60006007820290509190505600a16562" + "7a7a72305820f294e834212334e2978c6dd090355312a3f0f9476b8eb9" + "8fb480406fc2728a960029"; Json::Value create; @@ -1034,7 +1068,7 @@ BOOST_AUTO_TEST_CASE( deploy_contract_with_controller ) { Json::Value receipt = fixture.rpcClient->eth_getTransactionReceipt( txHash ); BOOST_CHECK_EQUAL( receipt["status"], string( "0x0" ) ); Json::Value code = - fixture.rpcClient->eth_getCode( receipt["contractAddress"].asString(), "latest" ); + fixture.rpcClient->eth_getCode( receipt["contractAddress"].asString(), "latest" ); BOOST_REQUIRE( code.asString() == "0x" ); } @@ -1046,21 +1080,21 @@ BOOST_AUTO_TEST_CASE( create_opcode ) { dev::eth::simulateMining( *( fixture.client ), 1 ); /* - pragma solidity ^0.4.25; + pragma solidity ^0.4.25; - contract test { - address public a; + contract test { + address public a; - function f() public { - address _address; - assembly { - let ptr := mload(0x40) - _address := create(0x00,ptr,0x20) - } - a = _address; + function f() public { + address _address; + assembly { + let ptr := mload(0x40) + _address := create(0x00,ptr,0x20) } + a = _address; } - */ + } +*/ string compiled = "608060405234801561001057600080fd5b50610161806100206000396000f30060806040526004361061004c57" @@ -1101,7 +1135,8 @@ BOOST_AUTO_TEST_CASE( create_opcode ) { checkAddress["to"] = contractAddress; checkAddress["data"] = "0x0dbe671f"; string response1 = fixture.rpcClient->eth_call( checkAddress, "latest" ); - BOOST_CHECK( response1 != "0x0000000000000000000000000000000000000000000000000000000000000000" ); + BOOST_CHECK( + response1 != "0x0000000000000000000000000000000000000000000000000000000000000000" ); fixture.client->setAuthor( senderAddress ); transactionCallObject["from"] = toJS( senderAddress ); @@ -1109,7 +1144,8 @@ BOOST_AUTO_TEST_CASE( create_opcode ) { dev::eth::mineTransaction( *( fixture.client ), 1 ); string response2 = fixture.rpcClient->eth_call( checkAddress, "latest" ); - BOOST_CHECK( response2 != "0x0000000000000000000000000000000000000000000000000000000000000000" ); + BOOST_CHECK( + response2 != "0x0000000000000000000000000000000000000000000000000000000000000000" ); BOOST_CHECK( response2 != response1 ); } @@ -1123,33 +1159,44 @@ BOOST_AUTO_TEST_CASE( push0_patch_activation ) { fixture.client->setAuthor( fixture.account2.address() ); dev::eth::simulateMining( *( fixture.client ), 1 ); -/* -// SPDX-License-Identifier: GPL-3.0 + /* + // SPDX-License-Identifier: GPL-3.0 -pragma solidity >=0.8.2; + pragma solidity >=0.8.2; -contract Push0Test { - fallback() external payable { - assembly { - let t := add(9, 10) + contract Push0Test { + fallback() external payable { + assembly { + let t := add(9, 10) + } } } -} -then convert to yul: solc --ir p0test.sol >p0test.yul + then convert to yul: --ir p0test.sol` >p0test.yul -then change code: - { - let r := add(88,99) - let tmp := verbatim_0i_1o(hex"5f") - } + then change code: + { + let r := add(88,99) + let tmp := verbatim_0i_1o(hex"5f") + } -then compile! + then compile! -*/ + */ string compiled = - "608060405234156100135761001261003b565b5b61001b610040565b610023610031565b6101b761004382396101b781f35b6000604051905090565b600080fd5b56fe608060405261000f36600061015b565b805160208201f35b60006060905090565b6000604051905090565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6100738261002a565b810181811067ffffffffffffffff821117156100925761009161003b565b5b80604052505050565b60006100a5610020565b90506100b1828261006a565b919050565b600067ffffffffffffffff8211156100d1576100d061003b565b5b6100da8261002a565b9050602081019050919050565b60006100f2826100b6565b6100fb8161009b565b915082825250919050565b7f7375636365737300000000000000000000000000000000000000000000000000600082015250565b600061013b60076100e7565b905061014960208201610106565b90565b600061015661012f565b905090565b6000610165610017565b809150600a6009015f505061017861014c565b9150509291505056fea2646970667358221220b3871ed09fbcbb1dac74c3cd48dafa5d097bea7c808b5ff2c16a996cf108d3c664736f6c63430008190033"; -// "60806040523415601057600f6031565b5b60166036565b601c6027565b604c60398239604c81f35b6000604051905090565b600080fd5b56fe6080604052600a600c565b005b60636058015f505056fea2646970667358221220ee9861b869ceda6de64f2ec7ccbebf2babce54b35502a866a4193e05ae595e1f64736f6c63430008130033"; + "608060405234156100135761001261003b565b5b61001b610040565b610023610031565b6101b7610043823961" + "01b781f35b6000604051905090565b600080fd5b56fe608060405261000f36600061015b565b805160208201f3" + "5b60006060905090565b6000604051905090565b6000601f19601f8301169050919050565b7f4e487b71000000" + "00000000000000000000000000000000000000000000000000600052604160045260246000fd5b610073826100" + "2a565b810181811067ffffffffffffffff821117156100925761009161003b565b5b80604052505050565b6000" + "6100a5610020565b90506100b1828261006a565b919050565b600067ffffffffffffffff8211156100d1576100" + "d061003b565b5b6100da8261002a565b9050602081019050919050565b60006100f2826100b6565b6100fb8161" + "009b565b915082825250919050565b7f7375636365737300000000000000000000000000000000000000000000" + "000000600082015250565b600061013b60076100e7565b905061014960208201610106565b90565b6000610156" + "61012f565b905090565b6000610165610017565b809150600a6009015f505061017861014c565b915050929150" + "5056fea2646970667358221220b3871ed09fbcbb1dac74c3cd48dafa5d097bea7c808b5ff2c16a996cf108d3c6" + "64736f6c63430008190033"; + // "60806040523415601057600f6031565b5b60166036565b601c6027565b604c60398239604c81f35b6000604051905090565b600080fd5b56fe6080604052600a600c565b005b60636058015f505056fea2646970667358221220ee9861b869ceda6de64f2ec7ccbebf2babce54b35502a866a4193e05ae595e1f64736f6c63430008130033"; Json::Value create; @@ -1161,7 +1208,7 @@ then compile! dev::eth::mineTransaction( *( fixture.client ), 1 ); Json::Value receipt = fixture.rpcClient->eth_getTransactionReceipt( txHash ); - BOOST_REQUIRE_EQUAL( receipt["status"], string( "0x1" ) ); // deploy should succeed + BOOST_REQUIRE_EQUAL( receipt["status"], string( "0x1" ) ); // deploy should succeed string contractAddress = receipt["contractAddress"].asString(); Json::Value callObject; @@ -1174,30 +1221,32 @@ then compile! txHash = fixture.rpcClient->eth_sendTransaction( callObject ); dev::eth::mineTransaction( *( fixture.client ), 1 ); receipt = fixture.rpcClient->eth_getTransactionReceipt( txHash ); - BOOST_REQUIRE_EQUAL( receipt["status"], string( "0x0" ) ); // exec should fail + BOOST_REQUIRE_EQUAL( receipt["status"], string( "0x0" ) ); // exec should fail - string callResult = fixture.rpcClient->eth_call(callObject, "latest"); - BOOST_REQUIRE_EQUAL( callResult, string( "0x" ) ); // call too + string callResult = fixture.rpcClient->eth_call( callObject, "latest" ); + BOOST_REQUIRE_EQUAL( callResult, string( "0x" ) ); // call too // wait for block after timestamp - BOOST_REQUIRE_LT( fixture.client->blockInfo(LatestBlock).timestamp(), fixture.push0PatchActivationTimestamp ); - while( time(nullptr) < fixture.push0PatchActivationTimestamp ) - sleep(1); + BOOST_REQUIRE_LT( fixture.client->blockInfo( LatestBlock ).timestamp(), + fixture.push0PatchActivationTimestamp ); + while ( time( nullptr ) < fixture.push0PatchActivationTimestamp ) + sleep( 1 ); // 1st timestamp-crossing block txHash = fixture.rpcClient->eth_sendTransaction( callObject ); dev::eth::mineTransaction( *( fixture.client ), 1 ); - BOOST_REQUIRE_GE( fixture.client->blockInfo(LatestBlock).timestamp(), fixture.push0PatchActivationTimestamp ); + BOOST_REQUIRE_GE( fixture.client->blockInfo( LatestBlock ).timestamp(), + fixture.push0PatchActivationTimestamp ); uint64_t crossingBlockNumber = fixture.client->number(); - (void) crossingBlockNumber; + ( void ) crossingBlockNumber; // in the "corssing" block tx still should fail receipt = fixture.rpcClient->eth_getTransactionReceipt( txHash ); BOOST_REQUIRE_EQUAL( receipt["status"], string( "0x0" ) ); // in 1st block with patch call should succeed - callResult = fixture.rpcClient->eth_call(callObject, "latest"); + callResult = fixture.rpcClient->eth_call( callObject, "latest" ); BOOST_REQUIRE_NE( callResult, string( "0x" ) ); // tx should succeed too @@ -1209,10 +1258,10 @@ then compile! #ifdef HISTORIC_STATE // histoic call should fail before activation and succees after it - callResult = fixture.rpcClient->eth_call(callObject, toJS(crossingBlockNumber-1)); + callResult = fixture.rpcClient->eth_call( callObject, toJS( crossingBlockNumber - 1 ) ); BOOST_REQUIRE_EQUAL( callResult, string( "0x" ) ); - callResult = fixture.rpcClient->eth_call(callObject, toJS(crossingBlockNumber)); + callResult = fixture.rpcClient->eth_call( callObject, toJS( crossingBlockNumber ) ); BOOST_REQUIRE_NE( callResult, string( "0x" ) ); #endif } @@ -1255,13 +1304,16 @@ BOOST_AUTO_TEST_CASE( eth_estimateGas ) { Json::Value testRevert; testRevert["to"] = "0xD2001300000000000000000000000000000000D4"; - testRevert["data"] = "0x20987767000000000000000000000000000000000000000000000000000000000000c350"; + testRevert["data"] = + "0x20987767000000000000000000000000000000000000000000000000000000000000c350"; string response = fixture.estimateGasShouldFail( testRevert ); - BOOST_CHECK( response.find("EVM revert instruction without description message") != string::npos ); + BOOST_CHECK( + response.find( "EVM revert instruction without description message" ) != string::npos ); Json::Value testPositive; testPositive["to"] = "0xD2001300000000000000000000000000000000D4"; - testPositive["data"] = "0xfdde8d66000000000000000000000000000000000000000000000000000000000000c350"; + testPositive["data"] = + "0xfdde8d66000000000000000000000000000000000000000000000000000000000000c350"; response = fixture.rpcClient->eth_estimateGas( testPositive ); string response2 = fixture.rpcClient->eth_estimateGas( testPositive, "latest" ); string response3 = fixture.rpcClient->eth_estimateGas( testPositive, "1" ); @@ -1276,7 +1328,7 @@ BOOST_AUTO_TEST_CASE( eth_estimateGas_chainId ) { Json::Reader().parse( _config, ret ); // Set chainID = 65535 - ret["params"]["chainID"] = "0xffff"; + ret["params"]["chainID"] = "0xffff"; Json::FastWriter fastWriter; std::string config = fastWriter.write( ret ); @@ -1301,7 +1353,7 @@ BOOST_AUTO_TEST_CASE( eth_estimateGas_chainId ) { BOOST_CHECK_EQUAL(ex.GetCode(), 3); BOOST_CHECK_EQUAL(ex.GetData().asString(), "0xc04eeb4c000000000000000000000000000000000000000000000000000000000000ffff"); BOOST_CHECK_EQUAL(ex.GetMessage(), "EVM revert instruction without description message"); - } + } } BOOST_AUTO_TEST_CASE( eth_sendRawTransaction_gasLimitExceeded ) { @@ -1414,8 +1466,7 @@ BOOST_AUTO_TEST_CASE( contract_storage ) { BOOST_REQUIRE( receipt2["contractAddress"].isNull() ); } -BOOST_AUTO_TEST_CASE( web3_sha3, - *boost::unit_test::precondition( dev::test::run_not_express ) ) { +BOOST_AUTO_TEST_CASE( web3_sha3, *boost::unit_test::precondition( dev::test::run_not_express ) ) { JsonRpcFixture fixture; string testString = "multiply(uint256)"; h256 expected = dev::sha3( testString ); @@ -1453,7 +1504,7 @@ BOOST_AUTO_TEST_CASE( test_importRawBlock ) { // blockHash, "0xedef94eddd6002ae14803b91aa5138932f948026310144fc615d52d7d5ff29c7" ); // TODO again, this was computed just in code - no trust to it - std::cerr << blockHash << std::endl; + std::cout << blockHash << std::endl; BOOST_CHECK_EQUAL( blockHash, "0x7683f686a7ecf6949d29cab2075b8aa45f061e27338e61ea3c37a7a0bd80f17b" ); } @@ -1495,9 +1546,9 @@ BOOST_AUTO_TEST_CASE( call_from_parameter ) { std::cout << cc::now2string() << " eth_getTransactionReceipt" << std::endl; Json::Value receipt; - try{ + try { receipt = fixture.rpcClient->eth_getTransactionReceipt( txHash ); - }catch(...){ + } catch ( ... ) { std::cout << cc::now2string() << " /eth_getTransactionReceipt" << std::endl; throw; } @@ -1557,7 +1608,7 @@ BOOST_AUTO_TEST_CASE( call_with_error ) { Json::Value create; create["from"] = toJS( senderAddress ); create["code"] = compiled; - create["gas"] = "180000"; + create["gas"] = "180000"; string txHash = fixture.rpcClient->eth_sendTransaction( create ); dev::eth::mineTransaction( *( fixture.client ), 1 ); @@ -1574,7 +1625,7 @@ BOOST_AUTO_TEST_CASE( call_with_error ) { BOOST_CHECK_EQUAL(ex.GetCode(), 3); BOOST_CHECK_EQUAL(ex.GetData().asString(), "0x82b42900"); BOOST_CHECK_EQUAL(ex.GetMessage(), "EVM revert instruction without description message"); - } + } } BOOST_AUTO_TEST_CASE( estimate_gas_with_error ) { @@ -1606,13 +1657,13 @@ BOOST_AUTO_TEST_CASE( estimate_gas_with_error ) { "208201905061012c6000830184610108565b9291505056fea264697066735822122013" "2ca0f4158a0540a7e67f304c94305f81bbe52de2314e2b9cee92a2c74e103a64736f6c" "63430008120033"; - + auto senderAddress = fixture.coinbase.address(); Json::Value create; create["from"] = toJS( senderAddress ); create["code"] = compiled; - create["gas"] = "180000"; + create["gas"] = "180000"; string txHash = fixture.rpcClient->eth_sendTransaction( create ); dev::eth::mineTransaction( *( fixture.client ), 1 ); @@ -1629,10 +1680,14 @@ BOOST_AUTO_TEST_CASE( estimate_gas_with_error ) { BOOST_CHECK_EQUAL(ex.GetCode(), 3); BOOST_CHECK_EQUAL(ex.GetData().asString(), "0x82b42900"); BOOST_CHECK_EQUAL(ex.GetMessage(), "EVM revert instruction without description message"); - } + } } BOOST_AUTO_TEST_CASE( simplePoWTransaction ) { + + u256 ESTIMATE_AFTER_PATCH = u256( 21000 + 1024 * 16 ); + u256 ESTIMATE_BEFORE_PATCH = u256( 21000 + 1024 * 68 ); + // 1s empty block interval JsonRpcFixture fixture( "", true, true, false, false, false, 1000 ); dev::eth::simulateMining( *( fixture.client ), 1 ); @@ -1643,25 +1698,28 @@ BOOST_AUTO_TEST_CASE( simplePoWTransaction ) { transact["from"] = toJS( senderAddress ); transact["to"] = toJS( senderAddress ); // 1k - ostringstream ss("0x"); - for(int i=0; i<1024/16; ++i) + ostringstream ss( "0x" ); + for ( int i = 0; i < 1024 / 16; ++i ) ss << "112233445566778899aabbccddeeff11"; transact["data"] = ss.str(); - string gasEstimateStr = fixture.rpcClient->eth_estimateGas(transact); - u256 gasEstimate = jsToU256(gasEstimateStr); + string gasEstimateStr = fixture.rpcClient->eth_estimateGas( transact ); + u256 gasEstimate = jsToU256( gasEstimateStr ); // old estimate before patch - BOOST_REQUIRE_EQUAL(gasEstimate, u256(21000+1024*68)); + BOOST_REQUIRE_EQUAL( gasEstimate, ESTIMATE_BEFORE_PATCH ); u256 powGasPrice = 0; - u256 correctEstimate = u256(21000+1024*16); + + do { + // mine enough POW to tun transaction after PATCH but not before patch const u256 GAS_PER_HASH = 1; u256 candidate = h256::random(); h256 hash = dev::sha3( senderAddress ) ^ dev::sha3( u256( 0 ) ) ^ dev::sha3( candidate ); u256 externalGas = ~u256( 0 ) / u256( hash ) * GAS_PER_HASH; - if ( externalGas >= correctEstimate && externalGas < correctEstimate + correctEstimate/10 ) { + if ( externalGas >= ESTIMATE_AFTER_PATCH && + externalGas < ESTIMATE_AFTER_PATCH + ESTIMATE_AFTER_PATCH / 10 ) { powGasPrice = candidate; } } while ( !powGasPrice ); @@ -1671,37 +1729,41 @@ BOOST_AUTO_TEST_CASE( simplePoWTransaction ) { // wait for patch turning on and see how it happens string txHash; BlockHeader badInfo, goodInfo; - for(;;) { - string gasEstimateStr = fixture.rpcClient->eth_estimateGas(transact); - u256 gasEstimate = jsToU256(gasEstimateStr); + uint64_t blockCounter = 2; + for ( ;; ) { + gasEstimateStr = fixture.rpcClient->eth_estimateGas( transact ); + gasEstimate = jsToU256( gasEstimateStr ); // old - if(gasEstimate == u256(21000+1024*68)){ - try{ + if ( gasEstimate == ESTIMATE_BEFORE_PATCH ) { + // we are before patch. Sending show fail since we do not have enough PoW gas + try { fixture.rpcClient->eth_sendTransaction( transact ); - BOOST_REQUIRE(false); - } catch(const std::exception& ex) { - assert(string(ex.what()).find("balance is too low") != string::npos); - badInfo = fixture.client->blockInfo(fixture.client->hashFromNumber(LatestBlock)); - dev::eth::mineTransaction( *( fixture.client ), 1 ); // empty block - } // catch - } - // new - else { - BOOST_REQUIRE_EQUAL(gasEstimate, correctEstimate); + BOOST_REQUIRE( false ); + } catch ( const std::exception& ex ) { + assert( string( ex.what() ).find( "balance is too low" ) != string::npos ); + badInfo = + fixture.client->blockInfo( fixture.client->hashFromNumber( LatestBlock ) ); + dev::eth::mineTransaction( *( fixture.client ), 1 ); // empty block + fixture.client->state().getOriginalDb()->createBlockSnap( blockCounter ); + blockCounter++; + } + } else { // now we are after patch + BOOST_REQUIRE_EQUAL( gasEstimate, ESTIMATE_AFTER_PATCH ); txHash = fixture.rpcClient->eth_sendTransaction( transact ); - goodInfo = fixture.client->blockInfo(fixture.client->hashFromNumber(LatestBlock)); + goodInfo = fixture.client->blockInfo( fixture.client->hashFromNumber( LatestBlock ) ); break; - } // else - } // for + } + } - BOOST_REQUIRE_LT(badInfo.timestamp(), fixture.powPatchActivationTimestamp); - BOOST_REQUIRE_GE(goodInfo.timestamp(), fixture.powPatchActivationTimestamp); - BOOST_REQUIRE_EQUAL(badInfo.number()+1, goodInfo.number()); + BOOST_REQUIRE_LT( badInfo.timestamp(), fixture.powPatchActivationTimestamp ); + BOOST_REQUIRE_GE( goodInfo.timestamp(), fixture.powPatchActivationTimestamp ); + BOOST_REQUIRE_EQUAL( badInfo.number() + 1, goodInfo.number() ); dev::eth::mineTransaction( *( fixture.client ), 1 ); + fixture.client->state().getOriginalDb()->createBlockSnap( blockCounter ); Json::Value receipt = fixture.rpcClient->eth_getTransactionReceipt( txHash ); - BOOST_REQUIRE_EQUAL(receipt["status"], "0x1"); + BOOST_REQUIRE_EQUAL( receipt["status"], "0x1" ); } BOOST_AUTO_TEST_CASE( recalculateExternalGas ) { @@ -1709,7 +1771,6 @@ BOOST_AUTO_TEST_CASE( recalculateExternalGas ) { Json::Value ret; Json::Reader().parse( _config, ret ); - // Set chainID = 21 std::string chainID = "0x15"; ret["params"]["chainID"] = chainID; @@ -1774,6 +1835,8 @@ BOOST_AUTO_TEST_CASE( recalculateExternalGas ) { std::string txHash = fixture.rpcClient->eth_sendTransaction( create ); dev::eth::mineTransaction( *( fixture.client ), 1 ); + + fixture.client->state().getOriginalDb()->createBlockSnap( 2 ); Json::Value receipt = fixture.rpcClient->eth_getTransactionReceipt( txHash ); BOOST_REQUIRE( receipt["status"].asString() == "0x1" ); std::string contractAddress = receipt["contractAddress"].asString(); @@ -1794,11 +1857,14 @@ BOOST_AUTO_TEST_CASE( recalculateExternalGas ) { txHash = fixture.rpcClient->eth_sendRawTransaction( dev::toHex( t.toBytes() ) ); dev::eth::mineTransaction( *( fixture.client ), 1 ); + fixture.client->state().getOriginalDb()->createBlockSnap( 3 ); receipt = fixture.rpcClient->eth_getTransactionReceipt( txHash ); + BOOST_REQUIRE( receipt["status"].asString() == "0x0" ); BOOST_REQUIRE( receipt["gasUsed"].asString() == "0x61cb" ); + sleep(10); // push new block to update timestamp @@ -1812,6 +1878,8 @@ BOOST_AUTO_TEST_CASE( recalculateExternalGas ) { txHash = fixture.rpcClient->eth_sendTransaction( refill ); dev::eth::mineTransaction( *( fixture.client ), 1 ); + fixture.client->state().getOriginalDb()->createBlockSnap( 4 ); + // send txn to a contract from another suspicious account // store( 4 ) txn["from"] = "0x5cdb7527ec85022991D4e27F254C438E8337ad7E"; @@ -1827,10 +1895,11 @@ BOOST_AUTO_TEST_CASE( recalculateExternalGas ) { txHash = fixture.rpcClient->eth_sendRawTransaction( dev::toHex( t.toBytes() ) ); dev::eth::mineTransaction( *( fixture.client ), 1 ); + fixture.client->state().getOriginalDb()->createBlockSnap( 5 ); receipt = fixture.rpcClient->eth_getTransactionReceipt( txHash ); BOOST_REQUIRE( receipt["status"].asString() == "0x1" ); - BOOST_REQUIRE( receipt["gasUsed"].asString() == "0x13ef4" ); + BOOST_REQUIRE( receipt["gasUsed"].asString() == "0x13ef4"); } BOOST_AUTO_TEST_CASE( skipTransactionExecution ) { @@ -1928,8 +1997,8 @@ BOOST_AUTO_TEST_CASE( transactionWithoutFunds ) { transact["to"] = contractAddress; transact["data"] = "0x15b2eec30000000000000000000000000000000000000000000000000000000000000003"; - string gasEstimateStr = fixture.rpcClient->eth_estimateGas(transact); - u256 gasEstimate = jsToU256(gasEstimateStr); + string gasEstimateStr = fixture.rpcClient->eth_estimateGas( transact ); + u256 gasEstimate = jsToU256( gasEstimateStr ); u256 powGasPrice = 0; do { @@ -1937,7 +2006,7 @@ BOOST_AUTO_TEST_CASE( transactionWithoutFunds ) { u256 candidate = h256::random(); h256 hash = dev::sha3( address2 ) ^ dev::sha3( u256( 0 ) ) ^ dev::sha3( candidate ); u256 externalGas = ~u256( 0 ) / u256( hash ) * GAS_PER_HASH; - if ( externalGas >= gasEstimate && externalGas < gasEstimate + gasEstimate/10 ) { + if ( externalGas >= gasEstimate && externalGas < gasEstimate + gasEstimate / 10 ) { powGasPrice = candidate; } } while ( !powGasPrice ); @@ -1989,7 +2058,8 @@ BOOST_AUTO_TEST_CASE( eth_sendRawTransaction_gasPriceTooLow ) { t["nonce"] = "1"; t["gasPrice"] = jsToDecimal( toJS( initial_gasPrice - 1 ) ); auto signedTx2 = fixture.rpcClient->eth_signTransaction( t ); - BOOST_CHECK_EQUAL( fixture.sendingRawShouldFail( signedTx2["raw"].asString() ), "Transaction gas price lower than current eth_gasPrice." ); + BOOST_CHECK_EQUAL( fixture.sendingRawShouldFail( signedTx2["raw"].asString() ), + "Transaction gas price lower than current eth_gasPrice." ); } // different ways to ask for topic(s) @@ -1998,26 +2068,33 @@ BOOST_AUTO_TEST_CASE( logs ) { dev::eth::simulateMining( *( fixture.client ), 1 ); // will generate topics [0xxxx, 0, 0], [0xxx, 0, 1] etc -/* -pragma solidity >=0.4.10 <0.7.0; + /* + pragma solidity >=0.4.10 <0.7.0; -contract Logger{ + contract Logger{ - uint256 i; - uint256 j; + uint256 i; + uint256 j; - fallback() external payable { - log3(bytes32(block.number), bytes32(block.number), bytes32(i), bytes32(j)); - j++; - if(j==10){ - j = 0; - i++; - }// j overflow + fallback() external payable { + log3(bytes32(block.number), bytes32(block.number), bytes32(i), bytes32(j)); + j++; + if(j==10){ + j = 0; + i++; + }// j overflow + } } + } */ - string bytecode = "6080604052348015600f57600080fd5b50609b8061001e6000396000f3fe608060405260015460001b60005460001b4360001b4360001b6040518082815260200191505060405180910390a3600160008154809291906001019190505550600a6001541415606357600060018190555060008081548092919060010191905055505b00fea2646970667358221220fdf2f98961b803b6b32dfc9be766990cbdb17559d9a03724d12fc672e33804b164736f6c634300060c0033"; + string bytecode = + "6080604052348015600f57600080fd5b50609b8061001e6000396000f3fe608060405260015460001b60005460" + "001b4360001b4360001b6040518082815260200191505060405180910390a36001600081548092919060010191" + "90505550600a6001541415606357600060018190555060008081548092919060010191905055505b00fea26469" + "70667358221220fdf2f98961b803b6b32dfc9be766990cbdb17559d9a03724d12fc672e33804b164736f6c6343" + "00060c0033"; Json::Value create; create["code"] = bytecode; @@ -2029,7 +2106,7 @@ contract Logger{ Json::Value deployReceipt = fixture.rpcClient->eth_getTransactionReceipt( deployHash ); string contractAddress = deployReceipt["contractAddress"].asString(); - for(int i=0; i<=23; ++i){ + for ( int i = 0; i <= 23; ++i ) { Json::Value t; t["from"] = toJS( fixture.coinbase.address() ); t["value"] = jsToDecimal( "0" ); @@ -2042,138 +2119,144 @@ contract Logger{ dev::eth::mineTransaction( *( fixture.client ), 1 ); Json::Value receipt = fixture.rpcClient->eth_getTransactionReceipt( txHash ); } - BOOST_REQUIRE_EQUAL(fixture.client->number(), 26); // block 1 - bootstrapAll, block 2 - deploy + BOOST_REQUIRE_EQUAL( fixture.client->number(), 26 ); // block 1 - bootstrapAll, block 2 - + // deploy // ask for logs Json::Value t; t["fromBlock"] = 3; t["toBlock"] = 26; t["address"] = contractAddress; - t["topics"] = Json::Value(Json::arrayValue); + t["topics"] = Json::Value( Json::arrayValue ); // 1 topics = [] - Json::Value logs = fixture.rpcClient->eth_getLogs(t); + Json::Value logs = fixture.rpcClient->eth_getLogs( t ); - BOOST_REQUIRE(logs.isArray()); - BOOST_REQUIRE_EQUAL(logs.size(), 24); + BOOST_REQUIRE( logs.isArray() ); + BOOST_REQUIRE_EQUAL( logs.size(), 24 ); u256 t1 = dev::jsToU256( logs[12]["topics"][1].asString() ); - BOOST_REQUIRE_EQUAL(t1, 1); + BOOST_REQUIRE_EQUAL( t1, 1 ); u256 t2 = dev::jsToU256( logs[12]["topics"][2].asString() ); - BOOST_REQUIRE_EQUAL(t2, 2); + BOOST_REQUIRE_EQUAL( t2, 2 ); // 2 topics = [a] - t["topics"] = Json::Value(Json::arrayValue); - t["topics"][1] = u256_to_js(dev::u256(2)); + t["topics"] = Json::Value( Json::arrayValue ); + t["topics"][1] = u256_to_js( dev::u256( 2 ) ); - logs = fixture.rpcClient->eth_getLogs(t); + logs = fixture.rpcClient->eth_getLogs( t ); - BOOST_REQUIRE(logs.isArray()); - BOOST_REQUIRE_EQUAL(logs.size(), 4); + BOOST_REQUIRE( logs.isArray() ); + BOOST_REQUIRE_EQUAL( logs.size(), 4 ); t1 = dev::jsToU256( logs[0]["topics"][1].asString() ); - BOOST_REQUIRE_EQUAL(t1, 2); + BOOST_REQUIRE_EQUAL( t1, 2 ); t2 = dev::jsToU256( logs[0]["topics"][2].asString() ); - BOOST_REQUIRE_EQUAL(t2, 0); + BOOST_REQUIRE_EQUAL( t2, 0 ); // 3 topics = [null, a] - t["topics"] = Json::Value(Json::arrayValue); - t["topics"][2] = u256_to_js(dev::u256(1)); // 01,11,21 but not 1x + t["topics"] = Json::Value( Json::arrayValue ); + t["topics"][2] = u256_to_js( dev::u256( 1 ) ); // 01,11,21 but not 1x - logs = fixture.rpcClient->eth_getLogs(t); + logs = fixture.rpcClient->eth_getLogs( t ); - BOOST_REQUIRE(logs.isArray()); - BOOST_REQUIRE_EQUAL(logs.size(), 3); + BOOST_REQUIRE( logs.isArray() ); + BOOST_REQUIRE_EQUAL( logs.size(), 3 ); // 4 topics = [a,b] - t["topics"] = Json::Value(Json::arrayValue); - t["topics"][1] = u256_to_js(dev::u256(1)); - t["topics"][2] = u256_to_js(dev::u256(2)); + t["topics"] = Json::Value( Json::arrayValue ); + t["topics"][1] = u256_to_js( dev::u256( 1 ) ); + t["topics"][2] = u256_to_js( dev::u256( 2 ) ); - logs = fixture.rpcClient->eth_getLogs(t); + logs = fixture.rpcClient->eth_getLogs( t ); - BOOST_REQUIRE(logs.isArray()); - BOOST_REQUIRE_EQUAL(logs.size(), 1); + BOOST_REQUIRE( logs.isArray() ); + BOOST_REQUIRE_EQUAL( logs.size(), 1 ); // 5 topics = [[a,b]] - t["topics"] = Json::Value(Json::arrayValue); - t["topics"][1] = Json::Value(Json::arrayValue); - t["topics"][1][0] = u256_to_js(dev::u256(1)); - t["topics"][1][1] = u256_to_js(dev::u256(2)); + t["topics"] = Json::Value( Json::arrayValue ); + t["topics"][1] = Json::Value( Json::arrayValue ); + t["topics"][1][0] = u256_to_js( dev::u256( 1 ) ); + t["topics"][1][1] = u256_to_js( dev::u256( 2 ) ); - logs = fixture.rpcClient->eth_getLogs(t); + logs = fixture.rpcClient->eth_getLogs( t ); - BOOST_REQUIRE(logs.isArray()); - BOOST_REQUIRE_EQUAL(logs.size(), 10+4); + BOOST_REQUIRE( logs.isArray() ); + BOOST_REQUIRE_EQUAL( logs.size(), 10 + 4 ); // 6 topics = [a,a] - t["topics"] = Json::Value(Json::arrayValue); - t["topics"][1] = u256_to_js(dev::u256(1)); - t["topics"][2] = u256_to_js(dev::u256(1)); + t["topics"] = Json::Value( Json::arrayValue ); + t["topics"][1] = u256_to_js( dev::u256( 1 ) ); + t["topics"][2] = u256_to_js( dev::u256( 1 ) ); - logs = fixture.rpcClient->eth_getLogs(t); + logs = fixture.rpcClient->eth_getLogs( t ); - BOOST_REQUIRE(logs.isArray()); - BOOST_REQUIRE_EQUAL(logs.size(), 1); + BOOST_REQUIRE( logs.isArray() ); + BOOST_REQUIRE_EQUAL( logs.size(), 1 ); // 7 topics = [[a,b], c] - t["topics"] = Json::Value(Json::arrayValue); - t["topics"][1] = Json::Value(Json::arrayValue); - t["topics"][1][0] = u256_to_js(dev::u256(1)); - t["topics"][1][1] = u256_to_js(dev::u256(2)); - t["topics"][2] = u256_to_js(dev::u256(1)); // 11, 21 + t["topics"] = Json::Value( Json::arrayValue ); + t["topics"][1] = Json::Value( Json::arrayValue ); + t["topics"][1][0] = u256_to_js( dev::u256( 1 ) ); + t["topics"][1][1] = u256_to_js( dev::u256( 2 ) ); + t["topics"][2] = u256_to_js( dev::u256( 1 ) ); // 11, 21 - logs = fixture.rpcClient->eth_getLogs(t); + logs = fixture.rpcClient->eth_getLogs( t ); - BOOST_REQUIRE(logs.isArray()); - BOOST_REQUIRE_EQUAL(logs.size(), 2); + BOOST_REQUIRE( logs.isArray() ); + BOOST_REQUIRE_EQUAL( logs.size(), 2 ); t1 = dev::jsToU256( logs[0]["topics"][1].asString() ); - BOOST_REQUIRE_EQUAL(t1, 1); + BOOST_REQUIRE_EQUAL( t1, 1 ); t2 = dev::jsToU256( logs[0]["topics"][2].asString() ); - BOOST_REQUIRE_EQUAL(t2, 1); + BOOST_REQUIRE_EQUAL( t2, 1 ); t1 = dev::jsToU256( logs[1]["topics"][1].asString() ); - BOOST_REQUIRE_EQUAL(t1, 2); + BOOST_REQUIRE_EQUAL( t1, 2 ); t2 = dev::jsToU256( logs[1]["topics"][2].asString() ); - BOOST_REQUIRE_EQUAL(t2, 1); + BOOST_REQUIRE_EQUAL( t2, 1 ); // 8 repeat #7 without address auto logs7 = logs; - t["address"] = Json::Value(Json::arrayValue); - logs = fixture.rpcClient->eth_getLogs(t); - BOOST_REQUIRE_EQUAL(logs7, logs); + t["address"] = Json::Value( Json::arrayValue ); + logs = fixture.rpcClient->eth_getLogs( t ); + BOOST_REQUIRE_EQUAL( logs7, logs ); // 9 repeat #7 with 2 addresses - t["address"] = Json::Value(Json::arrayValue); + t["address"] = Json::Value( Json::arrayValue ); t["address"][0] = contractAddress; - t["address"][1] = "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"; // dummy - logs = fixture.rpcClient->eth_getLogs(t); - BOOST_REQUIRE_EQUAL(logs7, logs); + t["address"][1] = "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"; // dummy + logs = fixture.rpcClient->eth_getLogs( t ); + BOOST_REQUIRE_EQUAL( logs7, logs ); // 10 request address only - t["topics"] = Json::Value(Json::arrayValue); - logs = fixture.rpcClient->eth_getLogs(t); - BOOST_REQUIRE(logs.isArray()); - BOOST_REQUIRE_EQUAL(logs.size(), 24); + t["topics"] = Json::Value( Json::arrayValue ); + logs = fixture.rpcClient->eth_getLogs( t ); + BOOST_REQUIRE( logs.isArray() ); + BOOST_REQUIRE_EQUAL( logs.size(), 24 ); } // limit on getLogs output BOOST_AUTO_TEST_CASE( getLogs_limit ) { - JsonRpcFixture fixture( "", true, true, false, false, false, -1, - {{"getLogsBlocksLimit", "10"}} ); + JsonRpcFixture fixture( + "", true, true, false, false, false, -1, { { "getLogsBlocksLimit", "10" } } ); dev::eth::simulateMining( *( fixture.client ), 1 ); /* - // SPDX-License-Identifier: None +// SPDX-License-Identifier: None pragma solidity ^0.8; contract Logger{ - event DummyEvent(uint256, uint256); - fallback() external payable { - for(uint i=0; i<100; ++i) - emit DummyEvent(block.number, i); - } +event DummyEvent(uint256, uint256); +fallback() external payable { + for(uint i=0; i<100; ++i) + emit DummyEvent(block.number, i); +} } */ - string bytecode = "6080604052348015600e575f80fd5b5060c080601a5f395ff3fe60806040525f5b6064811015604f577f90778767414a5c844b9d35a8745f67697ee3b8c2c3f4feafe5d9a3e234a5a3654382604051603d9291906067565b60405180910390a18060010190506006565b005b5f819050919050565b6061816051565b82525050565b5f60408201905060785f830185605a565b60836020830184605a565b939250505056fea264697066735822122040208e35f2706dd92c17579466ab671c308efec51f558a755ea2cf81105ab22964736f6c63430008190033"; + string bytecode = + "6080604052348015600e575f80fd5b5060c080601a5f395ff3fe60806040525f5b6064811015604f577f907787" + "67414a5c844b9d35a8745f67697ee3b8c2c3f4feafe5d9a3e234a5a3654382604051603d9291906067565b6040" + "5180910390a18060010190506006565b005b5f819050919050565b6061816051565b82525050565b5f60408201" + "905060785f830185605a565b60836020830184605a565b939250505056fea264697066735822122040208e35f2" + "706dd92c17579466ab671c308efec51f558a755ea2cf81105ab22964736f6c63430008190033"; Json::Value create; create["code"] = bytecode; @@ -2193,36 +2276,36 @@ contract Logger{ t["to"] = contractAddress; t["gas"] = "99000"; - for(int i=0; i<11; ++i){ - + for ( int i = 0; i < 11; ++i ) { std::string txHash = fixture.rpcClient->eth_sendTransaction( t ); BOOST_REQUIRE( !txHash.empty() ); dev::eth::mineTransaction( *( fixture.client ), 1 ); Json::Value receipt = fixture.rpcClient->eth_getTransactionReceipt( txHash ); - BOOST_REQUIRE_EQUAL(receipt["status"], "0x1"); + BOOST_REQUIRE_EQUAL( receipt["status"], "0x1" ); } // ask for logs Json::Value req; req["fromBlock"] = 1; req["toBlock"] = 11; - req["topics"] = Json::Value(Json::arrayValue); + req["topics"] = Json::Value( Json::arrayValue ); // 1 10 blocks - BOOST_REQUIRE_NO_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs(req) ); + BOOST_REQUIRE_NO_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs( req ) ); // 2 with topics req["address"] = contractAddress; - BOOST_REQUIRE_NO_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs(req) ); + BOOST_REQUIRE_NO_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs( req ) ); // 3 11 blocks req["toBlock"] = 12; - BOOST_REQUIRE_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs(req), std::exception ); + BOOST_REQUIRE_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs( req ), std::exception ); // 4 filter string filterId = fixture.rpcClient->eth_newFilter( req ); - BOOST_REQUIRE_THROW( Json::Value res = fixture.rpcClient->eth_getFilterLogs(filterId), std::exception ); - BOOST_REQUIRE_NO_THROW( Json::Value res = fixture.rpcClient->eth_getFilterChanges(filterId) ); + BOOST_REQUIRE_THROW( + Json::Value res = fixture.rpcClient->eth_getFilterLogs( filterId ), std::exception ); + BOOST_REQUIRE_NO_THROW( Json::Value res = fixture.rpcClient->eth_getFilterChanges( filterId ) ); } // test blockHash parameter @@ -2230,31 +2313,32 @@ BOOST_AUTO_TEST_CASE( getLogs_blockHash ) { JsonRpcFixture fixture; dev::eth::simulateMining( *( fixture.client ), 1 ); - string latestHash = fixture.rpcClient->eth_getBlockByNumber("latest", false)["hash"].asString(); + string latestHash = + fixture.rpcClient->eth_getBlockByNumber( "latest", false )["hash"].asString(); Json::Value req; req["blockHash"] = "xyz"; - BOOST_REQUIRE_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs(req), std::exception ); + BOOST_REQUIRE_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs( req ), std::exception ); - req["blockHash"] = Json::Value(Json::arrayValue); - BOOST_REQUIRE_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs(req), std::exception ); + req["blockHash"] = Json::Value( Json::arrayValue ); + BOOST_REQUIRE_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs( req ), std::exception ); req["fromBlock"] = 1; req["toBlock"] = 1; - BOOST_REQUIRE_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs(req), std::exception ); + BOOST_REQUIRE_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs( req ), std::exception ); req["blockHash"] = latestHash; - BOOST_REQUIRE_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs(req), std::exception ); + BOOST_REQUIRE_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs( req ), std::exception ); - req.removeMember("fromBlock"); - req.removeMember("toBlock"); - BOOST_REQUIRE_NO_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs(req) ); + req.removeMember( "fromBlock" ); + req.removeMember( "toBlock" ); + BOOST_REQUIRE_NO_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs( req ) ); req["blockHash"] = "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"; - BOOST_REQUIRE_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs(req), std::exception ); + BOOST_REQUIRE_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs( req ), std::exception ); req["blockHash"] = ""; - BOOST_REQUIRE_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs(req), std::exception ); + BOOST_REQUIRE_THROW( Json::Value logs = fixture.rpcClient->eth_getLogs( req ), std::exception ); } BOOST_AUTO_TEST_CASE( estimate_gas_low_gas_txn ) { @@ -2263,26 +2347,33 @@ BOOST_AUTO_TEST_CASE( estimate_gas_low_gas_txn ) { auto senderAddress = fixture.coinbase.address(); -/* -// SPDX-License-Identifier: None -pragma solidity ^0.6.0; + /* + // SPDX-License-Identifier: None + pragma solidity ^0.6.0; -contract TestEstimateGas { - uint256[256] number; - uint256 counter = 0; + contract TestEstimateGas { + uint256[256] number; + uint256 counter = 0; - function store(uint256 x) public { - number[counter] = x; - counter += 1; - } + function store(uint256 x) public { + number[counter] = x; + counter += 1; + } - function clear(uint256 pos) public { - number[pos] = 0; + function clear(uint256 pos) public { + number[pos] = 0; + } } -} -*/ + */ - string bytecode = "608060405260006101005534801561001657600080fd5b50610104806100266000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80636057361d146037578063c0fe1af8146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050608d565b005b608b60048036036020811015607657600080fd5b810190808035906020019092919050505060b8565b005b806000610100546101008110609e57fe5b018190555060016101006000828254019250508190555050565b60008082610100811060c657fe5b01819055505056fea26469706673582212206c8da972693a5b8c9bf59c197c4a0c554e9f51abd20047572c9c19125b533d2964736f6c634300060c0033"; + string bytecode = + "608060405260006101005534801561001657600080fd5b50610104806100266000396000f3fe60806040523480" + "15600f57600080fd5b506004361060325760003560e01c80636057361d146037578063c0fe1af8146062575b60" + "0080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050608d565b" + "005b608b60048036036020811015607657600080fd5b810190808035906020019092919050505060b8565b005b" + "806000610100546101008110609e57fe5b018190555060016101006000828254019250508190555050565b6000" + "8082610100811060c657fe5b01819055505056fea26469706673582212206c8da972693a5b8c9bf59c197c4a0c" + "554e9f51abd20047572c9c19125b533d2964736f6c634300060c0033"; Json::Value create; create["code"] = bytecode; @@ -2304,73 +2395,96 @@ contract TestEstimateGas { Json::Value estimateGasCall; // call clear(0) estimateGasCall["to"] = contractAddress; - estimateGasCall["data"] = "0xc0fe1af80000000000000000000000000000000000000000000000000000000000000000"; + estimateGasCall["data"] = + "0xc0fe1af80000000000000000000000000000000000000000000000000000000000000000"; estimateGasCall["from"] = toJS( senderAddress ); estimateGasCall["gasPrice"] = fixture.rpcClient->eth_gasPrice(); string estimatedGas = fixture.rpcClient->eth_estimateGas( estimateGasCall ); dev::bytes data = dev::jsToBytes( estimateGasCall["data"].asString() ); - BOOST_REQUIRE( dev::jsToU256( estimatedGas ) > dev::eth::TransactionBase::baseGasRequired( - false, &data, fixture.client->chainParams().makeEvmSchedule( - fixture.client->latestBlock().info().timestamp(), fixture.client->number() ) ) ); + BOOST_REQUIRE( + dev::jsToU256( estimatedGas ) > + dev::eth::TransactionBase::baseGasRequired( false, &data, + fixture.client->chainParams().makeEvmSchedule( + fixture.client->latestBlock().info().timestamp(), fixture.client->number() ) ) ); // try to send with this gas estimateGasCall["gas"] = toJS( jsToInt( estimatedGas ) ); string clearHash = fixture.rpcClient->eth_sendTransaction( estimateGasCall ); dev::eth::mineTransaction( *( fixture.client ), 1 ); Json::Value clearReceipt = fixture.rpcClient->eth_getTransactionReceipt( clearHash ); - BOOST_REQUIRE_EQUAL(clearReceipt["status"], "0x1"); - BOOST_REQUIRE_LT(jsToInt(clearReceipt["gasUsed"].asString()), 21000); + BOOST_REQUIRE_EQUAL( clearReceipt["status"], "0x1" ); + BOOST_REQUIRE_LT( jsToInt( clearReceipt["gasUsed"].asString() ), 21000 ); // try to lower gas estimateGasCall["gas"] = toJS( jsToInt( estimatedGas ) - 1 ); clearHash = fixture.rpcClient->eth_sendTransaction( estimateGasCall ); dev::eth::mineTransaction( *( fixture.client ), 1 ); clearReceipt = fixture.rpcClient->eth_getTransactionReceipt( clearHash ); - BOOST_REQUIRE_EQUAL(clearReceipt["status"], "0x0"); - BOOST_REQUIRE_GT(jsToInt(clearReceipt["gasUsed"].asString()), 21000); + BOOST_REQUIRE_EQUAL( clearReceipt["status"], "0x0" ); + BOOST_REQUIRE_GT( jsToInt( clearReceipt["gasUsed"].asString() ), 21000 ); } BOOST_AUTO_TEST_CASE( storage_limit_contract ) { JsonRpcFixture fixture; dev::eth::simulateMining( *( fixture.client ), 10 ); -// pragma solidity 0.4.25; + // pragma solidity 0.4.25; -// contract TestStorageLimit { + // contract TestStorageLimit { -// uint[] public storageArray; + // uint[] public storageArray; -// function store(uint256 num) public { -// storageArray.push( num ); -// } + // function store(uint256 num) public { + // storageArray.push( num ); + // } -// function erase(uint256 index) public { -// delete storageArray[index]; -// } + // function erase(uint256 index) public { + // delete storageArray[index]; + // } -// function foo() public view { -// uint len = storageArray.length; -// storageArray.push(1); -// } + // function foo() public view { + // uint len = storageArray.length; + // storageArray.push(1); + // } -// function storeAndCall(uint256 num) public { -// storageArray.push( num ); -// foo(); -// } + // function storeAndCall(uint256 num) public { + // storageArray.push( num ); + // foo(); + // } -// function zero(uint256 index) public { -// storageArray[index] = 0; -// } + // function zero(uint256 index) public { + // storageArray[index] = 0; + // } -// function strangeFunction(uint256 index) public { -// storageArray[index] = 1; -// storageArray[index] = 0; -// storageArray[index] = 2; -// } -// } + // function strangeFunction(uint256 index) public { + // storageArray[index] = 1; + // storageArray[index] = 0; + // storageArray[index] = 2; + // } + // } - std::string bytecode = "0x608060405234801561001057600080fd5b5061034f806100206000396000f300608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e031ab1146100885780631007f753146100c95780636057361d146100f6578063c298557814610123578063c67cd8841461013a578063d269ad4e14610167578063e0353e5914610194575b600080fd5b34801561009457600080fd5b506100b3600480360381019080803590602001909291905050506101c1565b6040518082815260200191505060405180910390f35b3480156100d557600080fd5b506100f4600480360381019080803590602001909291905050506101e4565b005b34801561010257600080fd5b5061012160048036038101908080359060200190929190505050610204565b005b34801561012f57600080fd5b50610138610233565b005b34801561014657600080fd5b506101656004803603810190808035906020019092919050505061026c565b005b34801561017357600080fd5b50610192600480360381019080803590602001909291905050506102a3565b005b3480156101a057600080fd5b506101bf60048036038101908080359060200190929190505050610302565b005b6000818154811015156101d057fe5b906000526020600020016000915090505481565b6000818154811015156101f357fe5b906000526020600020016000905550565b600081908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b60008080549050905060006001908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b60008190806001815401808255809150509060018203906000526020600020016000909192909190915055506102a0610233565b50565b60016000828154811015156102b457fe5b9060005260206000200181905550600080828154811015156102d257fe5b906000526020600020018190555060026000828154811015156102f157fe5b906000526020600020018190555050565b6000808281548110151561031257fe5b9060005260206000200181905550505600a165627a7a723058201ed095336772c55688864a6b45ca6ab89311c5533f8d38cdf931f1ce38be78080029"; + std::string bytecode = + "0x608060405234801561001057600080fd5b5061034f806100206000396000f300608060405260043610610083" + "576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e" + "031ab1146100885780631007f753146100c95780636057361d146100f6578063c298557814610123578063c67c" + "d8841461013a578063d269ad4e14610167578063e0353e5914610194575b600080fd5b34801561009457600080" + "fd5b506100b3600480360381019080803590602001909291905050506101c1565b604051808281526020019150" + "5060405180910390f35b3480156100d557600080fd5b506100f460048036038101908080359060200190929190" + "5050506101e4565b005b34801561010257600080fd5b5061012160048036038101908080359060200190929190" + "505050610204565b005b34801561012f57600080fd5b50610138610233565b005b34801561014657600080fd5b" + "506101656004803603810190808035906020019092919050505061026c565b005b34801561017357600080fd5b" + "50610192600480360381019080803590602001909291905050506102a3565b005b3480156101a057600080fd5b" + "506101bf60048036038101908080359060200190929190505050610302565b005b6000818154811015156101d0" + "57fe5b906000526020600020016000915090505481565b6000818154811015156101f357fe5b90600052602060" + "0020016000905550565b6000819080600181540180825580915050906001820390600052602060002001600090" + "91929091909150555050565b600080805490509050600060019080600181540180825580915050906001820390" + "60005260206000200160009091929091909150555050565b600081908060018154018082558091505090600182" + "03906000526020600020016000909192909190915055506102a0610233565b50565b6001600082815481101515" + "6102b457fe5b9060005260206000200181905550600080828154811015156102d257fe5b906000526020600020" + "018190555060026000828154811015156102f157fe5b906000526020600020018190555050565b600080828154" + "8110151561031257fe5b9060005260206000200181905550505600a165627a7a723058201ed095336772c55688" + "864a6b45ca6ab89311c5533f8d38cdf931f1ce38be78080029"; auto senderAddress = fixture.coinbase.address(); @@ -2393,9 +2507,10 @@ BOOST_AUTO_TEST_CASE( storage_limit_contract ) { txHash = fixture.rpcClient->eth_call( txCall, "latest" ); BOOST_REQUIRE( fixture.client->state().storageUsed( contract ) == 0 ); - Json::Value txPushValueAndCall; // call storeAndCall(1) + Json::Value txPushValueAndCall; // call storeAndCall(1) txPushValueAndCall["to"] = contractAddress; - txPushValueAndCall["data"] = "0xc67cd8840000000000000000000000000000000000000000000000000000000000000001"; + txPushValueAndCall["data"] = + "0xc67cd8840000000000000000000000000000000000000000000000000000000000000001"; txPushValueAndCall["from"] = toJS( senderAddress ); txPushValueAndCall["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txPushValueAndCall ); @@ -2404,7 +2519,8 @@ BOOST_AUTO_TEST_CASE( storage_limit_contract ) { Json::Value txPushValue; // call store(2) txPushValue["to"] = contractAddress; - txPushValue["data"] = "0x6057361d0000000000000000000000000000000000000000000000000000000000000002"; + txPushValue["data"] = + "0x6057361d0000000000000000000000000000000000000000000000000000000000000002"; txPushValue["from"] = toJS( senderAddress ); txPushValue["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txPushValue ); @@ -2422,7 +2538,8 @@ BOOST_AUTO_TEST_CASE( storage_limit_contract ) { Json::Value txEraseValue; // call erase(2) txEraseValue["to"] = contractAddress; - txEraseValue["data"] = "0x1007f7530000000000000000000000000000000000000000000000000000000000000002"; + txEraseValue["data"] = + "0x1007f7530000000000000000000000000000000000000000000000000000000000000002"; txEraseValue["from"] = toJS( senderAddress ); txEraseValue["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txEraseValue ); @@ -2431,7 +2548,8 @@ BOOST_AUTO_TEST_CASE( storage_limit_contract ) { Json::Value txZeroValue; // call zero(1) txZeroValue["to"] = contractAddress; - txZeroValue["data"] = "0xe0353e590000000000000000000000000000000000000000000000000000000000000001"; + txZeroValue["data"] = + "0xe0353e590000000000000000000000000000000000000000000000000000000000000001"; txZeroValue["from"] = toJS( senderAddress ); txZeroValue["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txZeroValue ); @@ -2440,7 +2558,8 @@ BOOST_AUTO_TEST_CASE( storage_limit_contract ) { Json::Value txZeroValue1; // call zero(1) txZeroValue1["to"] = contractAddress; - txZeroValue1["data"] = "0xe0353e590000000000000000000000000000000000000000000000000000000000000001"; + txZeroValue1["data"] = + "0xe0353e590000000000000000000000000000000000000000000000000000000000000001"; txZeroValue1["from"] = toJS( senderAddress ); txZeroValue1["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txZeroValue1 ); @@ -2449,7 +2568,8 @@ BOOST_AUTO_TEST_CASE( storage_limit_contract ) { Json::Value txValueChanged; // call strangeFunction(1) txValueChanged["to"] = contractAddress; - txValueChanged["data"] = "0xd269ad4e0000000000000000000000000000000000000000000000000000000000000001"; + txValueChanged["data"] = + "0xd269ad4e0000000000000000000000000000000000000000000000000000000000000001"; txValueChanged["from"] = toJS( senderAddress ); txValueChanged["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txValueChanged ); @@ -2458,7 +2578,8 @@ BOOST_AUTO_TEST_CASE( storage_limit_contract ) { Json::Value txValueChanged1; // call strangeFunction(0) txValueChanged1["to"] = contractAddress; - txValueChanged1["data"] = "0xd269ad4e0000000000000000000000000000000000000000000000000000000000000000"; + txValueChanged1["data"] = + "0xd269ad4e0000000000000000000000000000000000000000000000000000000000000000"; txValueChanged1["from"] = toJS( senderAddress ); txValueChanged1["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txValueChanged1 ); @@ -2467,7 +2588,8 @@ BOOST_AUTO_TEST_CASE( storage_limit_contract ) { Json::Value txValueChanged2; // call strangeFunction(2) txValueChanged2["to"] = contractAddress; - txValueChanged2["data"] = "0xd269ad4e0000000000000000000000000000000000000000000000000000000000000002"; + txValueChanged2["data"] = + "0xd269ad4e0000000000000000000000000000000000000000000000000000000000000002"; txValueChanged2["from"] = toJS( senderAddress ); txValueChanged2["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txValueChanged2 ); @@ -2476,7 +2598,8 @@ BOOST_AUTO_TEST_CASE( storage_limit_contract ) { Json::Value txValueChanged3; // try call strangeFunction(3) txValueChanged3["to"] = contractAddress; - txValueChanged3["data"] = "0xd269ad4e0000000000000000000000000000000000000000000000000000000000000003"; + txValueChanged3["data"] = + "0xd269ad4e0000000000000000000000000000000000000000000000000000000000000003"; txValueChanged3["from"] = toJS( senderAddress ); txValueChanged3["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txValueChanged3 ); @@ -2487,21 +2610,29 @@ BOOST_AUTO_TEST_CASE( storage_limit_contract ) { BOOST_AUTO_TEST_CASE( storage_limit_chain ) { JsonRpcFixture fixture; dev::eth::simulateMining( *( fixture.client ), 20 ); -// pragma solidity >=0.4.22 <0.7.0; + // pragma solidity >=0.4.22 <0.7.0; -// contract TestStorage1 { + // contract TestStorage1 { -// uint[] array; + // uint[] array; -// function store(uint256 num) public { -// array.push( num + 2 ); -// } + // function store(uint256 num) public { + // array.push( num + 2 ); + // } -// function erase(uint idx) public { -// delete array[idx]; -// } -// } - std::string bytecode1 = "608060405234801561001057600080fd5b5061012c806100206000396000f3fe6080604052348015600f57600080fd5b5060043610604f576000357c0100000000000000000000000000000000000000000000000000000000900480631007f7531460545780636057361d14607f575b600080fd5b607d60048036036020811015606857600080fd5b810190808035906020019092919050505060aa565b005b60a860048036036020811015609357600080fd5b810190808035906020019092919050505060c7565b005b6000818154811060b657fe5b906000526020600020016000905550565b60006002820190806001815401808255809150506001900390600052602060002001600090919091909150555056fea264697066735822122055c65b9e093cdb44864dac3fb79ec15a542db86c2f897b938043d8e15468ca4464736f6c63430006060033"; + // function erase(uint idx) public { + // delete array[idx]; + // } + // } + std::string bytecode1 = + "608060405234801561001057600080fd5b5061012c806100206000396000f3fe6080604052348015600f576000" + "80fd5b5060043610604f576000357c010000000000000000000000000000000000000000000000000000000090" + "0480631007f7531460545780636057361d14607f575b600080fd5b607d60048036036020811015606857600080" + "fd5b810190808035906020019092919050505060aa565b005b60a860048036036020811015609357600080fd5b" + "810190808035906020019092919050505060c7565b005b6000818154811060b657fe5b90600052602060002001" + "6000905550565b6000600282019080600181540180825580915050600190039060005260206000200160009091" + "9091909150555056fea264697066735822122055c65b9e093cdb44864dac3fb79ec15a542db86c2f897b938043" + "d8e15468ca4464736f6c63430006060033"; auto senderAddress = fixture.coinbase.address(); @@ -2515,20 +2646,20 @@ BOOST_AUTO_TEST_CASE( storage_limit_chain ) { Json::Value receipt1 = fixture.rpcClient->eth_getTransactionReceipt( txHash ); string contractAddress1 = receipt1["contractAddress"].asString(); -// pragma solidity >=0.4.22 <0.7.0; + // pragma solidity >=0.4.22 <0.7.0; -// contract TestStorage2 { + // contract TestStorage2 { -// uint[] array; + // uint[] array; -// function store(uint256 num) public { -// array.push( num ); -// } + // function store(uint256 num) public { + // array.push( num ); + // } -// function erase(uint idx) public { -// delete array[idx]; -// } -// } + // function erase(uint idx) public { + // delete array[idx]; + // } + // } Json::Value txStore; // call store(1) txStore["to"] = contractAddress1; txStore["data"] = "0x6057361d0000000000000000000000000000000000000000000000000000000000000001"; @@ -2536,7 +2667,7 @@ BOOST_AUTO_TEST_CASE( storage_limit_chain ) { txStore["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txStore ); dev::eth::mineTransaction( *( fixture.client ), 1 ); - BOOST_REQUIRE( fixture.client->state().storageUsedTotal() == 64); + BOOST_REQUIRE( fixture.client->state().storageUsedTotal() == 64 ); // call store(2) txStore["to"] = contractAddress1; @@ -2554,23 +2685,31 @@ BOOST_AUTO_TEST_CASE( storage_limit_chain ) { txErase["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txErase ); dev::eth::mineTransaction( *( fixture.client ), 1 ); - BOOST_REQUIRE( fixture.client->state().storageUsedTotal() == 64); + BOOST_REQUIRE( fixture.client->state().storageUsedTotal() == 64 ); -// pragma solidity >=0.4.22 <0.7.0; + // pragma solidity >=0.4.22 <0.7.0; -// contract TestStorage2 { + // contract TestStorage2 { -// uint[] array; + // uint[] array; -// function store(uint256 num) public { -// array.push( num ); -// } + // function store(uint256 num) public { + // array.push( num ); + // } -// function erase(uint idx) public { -// delete array[idx]; -// } -// } - std::string bytecode2 = "608060405234801561001057600080fd5b50610129806100206000396000f3fe6080604052348015600f57600080fd5b5060043610604f576000357c0100000000000000000000000000000000000000000000000000000000900480631007f7531460545780636057361d14607f575b600080fd5b607d60048036036020811015606857600080fd5b810190808035906020019092919050505060aa565b005b60a860048036036020811015609357600080fd5b810190808035906020019092919050505060c7565b005b6000818154811060b657fe5b906000526020600020016000905550565b60008190806001815401808255809150506001900390600052602060002001600090919091909150555056fea26469706673582212202bfb5f6fb63ae4f1c9a362ed3f7de7aa5514029db925efa368e711e35d9ebc0a64736f6c63430006060033"; + // function erase(uint idx) public { + // delete array[idx]; + // } + // } + std::string bytecode2 = + "608060405234801561001057600080fd5b50610129806100206000396000f3fe6080604052348015600f576000" + "80fd5b5060043610604f576000357c010000000000000000000000000000000000000000000000000000000090" + "0480631007f7531460545780636057361d14607f575b600080fd5b607d60048036036020811015606857600080" + "fd5b810190808035906020019092919050505060aa565b005b60a860048036036020811015609357600080fd5b" + "810190808035906020019092919050505060c7565b005b6000818154811060b657fe5b90600052602060002001" + "6000905550565b6000819080600181540180825580915050600190039060005260206000200160009091909190" + "9150555056fea26469706673582212202bfb5f6fb63ae4f1c9a362ed3f7de7aa5514029db925efa368e711e35d" + "9ebc0a64736f6c63430006060033"; Json::Value create2; create2["from"] = toJS( senderAddress ); @@ -2582,9 +2721,10 @@ BOOST_AUTO_TEST_CASE( storage_limit_chain ) { Json::Value receipt2 = fixture.rpcClient->eth_getTransactionReceipt( txHash ); string contractAddress2 = receipt2["contractAddress"].asString(); - Json::Value txStoreSecondContract; // call store(1) + Json::Value txStoreSecondContract; // call store(1) txStoreSecondContract["to"] = contractAddress2; - txStoreSecondContract["data"] = "0x6057361d0000000000000000000000000000000000000000000000000000000000000001"; + txStoreSecondContract["data"] = + "0x6057361d0000000000000000000000000000000000000000000000000000000000000001"; txStoreSecondContract["from"] = toJS( senderAddress ); txStoreSecondContract["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txStoreSecondContract ); @@ -2593,7 +2733,8 @@ BOOST_AUTO_TEST_CASE( storage_limit_chain ) { // try call store(2) to second contract txStoreSecondContract["to"] = contractAddress2; - txStoreSecondContract["data"] = "0x6057361d0000000000000000000000000000000000000000000000000000000000000002"; + txStoreSecondContract["data"] = + "0x6057361d0000000000000000000000000000000000000000000000000000000000000002"; txStoreSecondContract["from"] = toJS( senderAddress ); txStoreSecondContract["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txStoreSecondContract ); @@ -2611,7 +2752,8 @@ BOOST_AUTO_TEST_CASE( storage_limit_chain ) { Json::Value txZeroValue; // call zero(1) txZeroValue["to"] = contractAddress1; - txZeroValue["data"] = "0x1007f7530000000000000000000000000000000000000000000000000000000000000000"; + txZeroValue["data"] = + "0x1007f7530000000000000000000000000000000000000000000000000000000000000000"; txZeroValue["from"] = toJS( senderAddress ); txZeroValue["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txZeroValue ); @@ -2625,11 +2767,12 @@ BOOST_AUTO_TEST_CASE( storage_limit_predeployed ) { BOOST_REQUIRE( fixture.client->state().storageUsedTotal() == 64 ); string contractAddress = "0xC2002000000000000000000000000000000000C2"; - string senderAddress = toJS(fixture.coinbase.address()); + string senderAddress = toJS( fixture.coinbase.address() ); Json::Value txChangeInt; txChangeInt["to"] = contractAddress; - txChangeInt["data"] = "0xcd16ecbf0000000000000000000000000000000000000000000000000000000000000002"; + txChangeInt["data"] = + "0xcd16ecbf0000000000000000000000000000000000000000000000000000000000000002"; txChangeInt["from"] = senderAddress; txChangeInt["gasPrice"] = fixture.rpcClient->eth_gasPrice(); string txHash = fixture.rpcClient->eth_sendTransaction( txChangeInt ); @@ -2638,7 +2781,8 @@ BOOST_AUTO_TEST_CASE( storage_limit_predeployed ) { Json::Value txZeroValue; txZeroValue["to"] = contractAddress; - txZeroValue["data"] = "0xcd16ecbf0000000000000000000000000000000000000000000000000000000000000000"; + txZeroValue["data"] = + "0xcd16ecbf0000000000000000000000000000000000000000000000000000000000000000"; txZeroValue["from"] = senderAddress; txZeroValue["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txZeroValue ); @@ -2648,7 +2792,8 @@ BOOST_AUTO_TEST_CASE( storage_limit_predeployed ) { Json::Value txChangeInt1; txChangeInt["to"] = contractAddress; - txChangeInt["data"] = "0x9b0631040000000000000000000000000000000000000000000000000000000000000001"; + txChangeInt["data"] = + "0x9b0631040000000000000000000000000000000000000000000000000000000000000001"; txChangeInt["from"] = senderAddress; txChangeInt["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txHash = fixture.rpcClient->eth_sendTransaction( txChangeInt ); @@ -2660,21 +2805,29 @@ BOOST_AUTO_TEST_CASE( storage_limit_predeployed ) { BOOST_AUTO_TEST_CASE( storage_limit_reverted ) { JsonRpcFixture fixture; dev::eth::simulateMining( *( fixture.client ), 1000 ); -// pragma solidity >=0.7.0 <0.9.0; + // pragma solidity >=0.7.0 <0.9.0; -// contract Storage { + // contract Storage { -// uint256[10] number; + // uint256[10] number; -// /** -// * @dev Store value in variable -// * @param num value to store -// */ -// function store(uint256 num, uint256 pos) public { -// number[pos] = num; -// } -// } - std::string bytecode1 = "0x608060405234801561001057600080fd5b50610134806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80636ed28ed014602d575b600080fd5b60436004803603810190603f91906096565b6045565b005b81600082600a8110605757605660cf565b5b01819055505050565b600080fd5b6000819050919050565b6076816065565b8114608057600080fd5b50565b600081359050609081606f565b92915050565b6000806040838503121560aa5760a96060565b5b600060b6858286016083565b925050602060c5858286016083565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ec8739ad7fc74a76053c683510b3c836d01c7eda3687d89e65380260a97e741b64736f6c63430008120033"; + // /** + // * @dev Store value in variable + // * @param num value to store + // */ + // function store(uint256 num, uint256 pos) public { + // number[pos] = num; + // } + // } + std::string bytecode1 = + "0x608060405234801561001057600080fd5b50610134806100206000396000f3fe6080604052348015600f5760" + "0080fd5b506004361060285760003560e01c80636ed28ed014602d575b600080fd5b6043600480360381019060" + "3f91906096565b6045565b005b81600082600a8110605757605660cf565b5b01819055505050565b600080fd5b" + "6000819050919050565b6076816065565b8114608057600080fd5b50565b600081359050609081606f565b9291" + "5050565b6000806040838503121560aa5760a96060565b5b600060b6858286016083565b925050602060c58582" + "86016083565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000" + "00000000600052603260045260246000fdfea2646970667358221220ec8739ad7fc74a76053c683510b3c836d0" + "1c7eda3687d89e65380260a97e741b64736f6c63430008120033"; auto senderAddress = fixture.coinbase.address(); Json::Value create1; @@ -2688,36 +2841,77 @@ BOOST_AUTO_TEST_CASE( storage_limit_reverted ) { BOOST_REQUIRE( receipt1["status"] == string( "0x1" ) ); string contractAddress1 = receipt1["contractAddress"].asString(); -// contract CallTry { + // contract CallTry { -// bool success; -// uint256 count; -// address storageAddress; + // bool success; + // uint256 count; + // address storageAddress; -// event Message(string mes); + // event Message(string mes); -// constructor(address newAddress) { -// storageAddress = newAddress; -// } + // constructor(address newAddress) { + // storageAddress = newAddress; + // } -// function storeTry() public { -// count = 1; -// success = true; -// try Storage(storageAddress).store(10, 10) { -// emit Message("true"); -// } catch Error(string memory reason) { -// emit Message(reason); -// } catch Panic(uint errorCode) { -// emit Message(string(abi.encodePacked(errorCode))); -// } catch (bytes memory revertData) { -// emit Message(string(revertData)); -// }contractAddress1 -// count = 0; -// success = false; -// } -// } + // function storeTry() public { + // count = 1; + // success = true; + // try Storage(storageAddress).store(10, 10) { + // emit Message("true"); + // } catch Error(string memory reason) { + // emit Message(reason); + // } catch Panic(uint errorCode) { + // emit Message(string(abi.encodePacked(errorCode))); + // } catch (bytes memory revertData) { + // emit Message(string(revertData)); + // }contractAddress1 + // count = 0; + // success = false; + // } + // } - std::string bytecode2 = "608060405234801561001057600080fd5b506040516106f93803806106f9833981810160405281019061003291906100dc565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610109565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100a98261007e565b9050919050565b6100b98161009e565b81146100c457600080fd5b50565b6000815190506100d6816100b0565b92915050565b6000602082840312156100f2576100f1610079565b5b6000610100848285016100c7565b91505092915050565b6105e1806101186000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c18829ca14610030575b600080fd5b61003861003a565b005b6001808190555060016000806101000a81548160ff021916908315150217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636ed28ed0600a806040518363ffffffff1660e01b81526004016100b99291906102de565b600060405180830381600087803b1580156100d357600080fd5b505af19250505080156100e4575060015b610235576100f0610314565b806308c379a00361014c57506101046103b1565b8061010f57506101c5565b7f51a7f65c6325882f237d4aeb43228179cfad48b868511d508e24b4437a8191378160405161013e91906104c0565b60405180910390a150610230565b634e487b71036101c55761015e6104e2565b9061016957506101c5565b7f51a7f65c6325882f237d4aeb43228179cfad48b868511d508e24b4437a8191378160405160200161019b9190610524565b6040516020818303038152906040526040516101b791906104c0565b60405180910390a150610230565b3d80600081146101f1576040519150601f19603f3d011682016040523d82523d6000602084013e6101f6565b606091505b507f51a7f65c6325882f237d4aeb43228179cfad48b868511d508e24b4437a8191378160405161022691906104c0565b60405180910390a1505b61026b565b7f51a7f65c6325882f237d4aeb43228179cfad48b868511d508e24b4437a8191376040516102629061058b565b60405180910390a15b600060018190555060008060006101000a81548160ff021916908315150217905550565b6000819050919050565b6000819050919050565b6000819050919050565b60006102c86102c36102be8461028f565b6102a3565b610299565b9050919050565b6102d8816102ad565b82525050565b60006040820190506102f360008301856102cf565b61030060208301846102cf565b9392505050565b60008160e01c9050919050565b600060033d11156103335760046000803e610330600051610307565b90505b90565b6000604051905090565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61038982610340565b810181811067ffffffffffffffff821117156103a8576103a7610351565b5b80604052505050565b600060443d1061043e576103c3610336565b60043d036004823e80513d602482011167ffffffffffffffff821117156103eb57505061043e565b808201805167ffffffffffffffff811115610409575050505061043e565b80602083010160043d03850181111561042657505050505061043e565b61043582602001850186610380565b82955050505050505b90565b600081519050919050565b600082825260208201905092915050565b60005b8381101561047b578082015181840152602081019050610460565b60008484015250505050565b600061049282610441565b61049c818561044c565b93506104ac81856020860161045d565b6104b581610340565b840191505092915050565b600060208201905081810360008301526104da8184610487565b905092915050565b60008060233d11156104ff576020600460003e6001915060005190505b9091565b6000819050919050565b61051e61051982610299565b610503565b82525050565b6000610530828461050d565b60208201915081905092915050565b7f7472756500000000000000000000000000000000000000000000000000000000600082015250565b600061057560048361044c565b91506105808261053f565b602082019050919050565b600060208201905081810360008301526105a481610568565b905091905056fea26469706673582212201a522ad11a321603efd182e33e10b59f65b8c9a8b84c8ec3d832ff1d0b726cc564736f6c63430008120033" + std::string("000000000000000000000000") + contractAddress1.substr(2); + std::string bytecode2 = + "608060405234801561001057600080fd5b506040516106f93803806106f9833981810160405281019061003291" + "906100dc565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373" + "ffffffffffffffffffffffffffffffffffffffff16021790555050610109565b600080fd5b600073ffffffffff" + "ffffffffffffffffffffffffffffff82169050919050565b60006100a98261007e565b9050919050565b6100b9" + "8161009e565b81146100c457600080fd5b50565b6000815190506100d6816100b0565b92915050565b60006020" + "82840312156100f2576100f1610079565b5b6000610100848285016100c7565b91505092915050565b6105e180" + "6101186000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c1" + "8829ca14610030575b600080fd5b61003861003a565b005b6001808190555060016000806101000a81548160ff" + "021916908315150217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffff" + "ff1673ffffffffffffffffffffffffffffffffffffffff16636ed28ed0600a806040518363ffffffff1660e01b" + "81526004016100b99291906102de565b600060405180830381600087803b1580156100d357600080fd5b505af1" + "9250505080156100e4575060015b610235576100f0610314565b806308c379a00361014c57506101046103b156" + "5b8061010f57506101c5565b7f51a7f65c6325882f237d4aeb43228179cfad48b868511d508e24b4437a819137" + "8160405161013e91906104c0565b60405180910390a150610230565b634e487b71036101c55761015e6104e256" + "5b9061016957506101c5565b7f51a7f65c6325882f237d4aeb43228179cfad48b868511d508e24b4437a819137" + "8160405160200161019b9190610524565b6040516020818303038152906040526040516101b791906104c0565b" + "60405180910390a150610230565b3d80600081146101f1576040519150601f19603f3d011682016040523d8252" + "3d6000602084013e6101f6565b606091505b507f51a7f65c6325882f237d4aeb43228179cfad48b868511d508e" + "24b4437a8191378160405161022691906104c0565b60405180910390a1505b61026b565b7f51a7f65c6325882f" + "237d4aeb43228179cfad48b868511d508e24b4437a8191376040516102629061058b565b60405180910390a15b" + "600060018190555060008060006101000a81548160ff021916908315150217905550565b600081905091905056" + "5b6000819050919050565b6000819050919050565b60006102c86102c36102be8461028f565b6102a3565b6102" + "99565b9050919050565b6102d8816102ad565b82525050565b60006040820190506102f360008301856102cf56" + "5b61030060208301846102cf565b9392505050565b60008160e01c9050919050565b600060033d111561033357" + "60046000803e610330600051610307565b90505b90565b6000604051905090565b6000601f19601f8301169050" + "919050565b7f4e487b710000000000000000000000000000000000000000000000000000000060005260416004" + "5260246000fd5b61038982610340565b810181811067ffffffffffffffff821117156103a8576103a761035156" + "5b5b80604052505050565b600060443d1061043e576103c3610336565b60043d036004823e80513d6024820111" + "67ffffffffffffffff821117156103eb57505061043e565b808201805167ffffffffffffffff81111561040957" + "5050505061043e565b80602083010160043d03850181111561042657505050505061043e565b61043582602001" + "850186610380565b82955050505050505b90565b600081519050919050565b6000828252602082019050929150" + "50565b60005b8381101561047b578082015181840152602081019050610460565b60008484015250505050565b" + "600061049282610441565b61049c818561044c565b93506104ac81856020860161045d565b6104b58161034056" + "5b840191505092915050565b600060208201905081810360008301526104da8184610487565b90509291505056" + "5b60008060233d11156104ff576020600460003e6001915060005190505b9091565b6000819050919050565b61" + "051e61051982610299565b610503565b82525050565b6000610530828461050d565b6020820191508190509291" + "5050565b7f7472756500000000000000000000000000000000000000000000000000000000600082015250565b" + "600061057560048361044c565b91506105808261053f565b602082019050919050565b60006020820190508181" + "0360008301526105a481610568565b905091905056fea26469706673582212201a522ad11a321603efd182e33e" + "10b59f65b8c9a8b84c8ec3d832ff1d0b726cc564736f6c63430008120033" + + std::string( "000000000000000000000000" ) + contractAddress1.substr( 2 ); Json::Value create2; create2["from"] = toJS( senderAddress ); create2["data"] = bytecode2; @@ -2749,7 +2943,8 @@ BOOST_AUTO_TEST_CASE( setSchainExitTime ) { JsonRpcFixture fixture; Json::Value requestJson; requestJson["finishTime"] = 100; - BOOST_REQUIRE_THROW(fixture.rpcClient->setSchainExitTime(requestJson), jsonrpc::JsonRpcException); + BOOST_REQUIRE_THROW( + fixture.rpcClient->setSchainExitTime( requestJson ), jsonrpc::JsonRpcException ); } /* @@ -2761,10 +2956,9 @@ BOOST_AUTO_TEST_CASE( oracle, *boost::unit_test::disabled() ) { std::time_t current = std::time(nullptr); std::string request; for (int i = 0; i < 1000000; ++i) { - request = skutils::tools::format("{\"cid\":1,\"uri\":\"http://worldtimeapi.org/api/timezone/Europe/Kiev\",\"jsps\":[\"/unixtime\",\"/day_of_year\",\"/xxx\"],\"trims\":[1,1,1],\"time\":%zu000,\"pow\":%zu}", current, i); - auto os = make_shared(request); - if ( os->verifyPow() ) { - break; + request = +skutils::tools::format("{\"cid\":1,\"uri\":\"http://worldtimeapi.org/api/timezone/Europe/Kiev\",\"jsps\":[\"/unixtime\",\"/day_of_year\",\"/xxx\"],\"trims\":[1,1,1],\"time\":%zu000,\"pow\":%zu}", +current, i); auto os = make_shared(request); if ( os->verifyPow() ) { break; } } uint64_t status = fixture.client->submitOracleRequest(request, receipt); @@ -2791,18 +2985,19 @@ BOOST_AUTO_TEST_CASE( doDbCompactionDebugCall ) { } BOOST_AUTO_TEST_CASE( powTxnGasLimit ) { - JsonRpcFixture fixture(c_genesisConfigString, false, false, true, false); + JsonRpcFixture fixture( c_genesisConfigString, false, false, true, false ); // mine blocks without transactions dev::eth::simulateMining( *( fixture.client ), 2000000 ); - string senderAddress = toJS(fixture.coinbase.address()); + string senderAddress = toJS( fixture.coinbase.address() ); Json::Value txPOW1; txPOW1["to"] = "0x0000000000000000000000000000000000000033"; txPOW1["from"] = senderAddress; txPOW1["gas"] = "100000"; - txPOW1["gasPrice"] = "0xa449dcaf2bca14e6bd0ac650eed9555008363002b2fc3a4c8422b7a9525a8135"; // gas 200k + txPOW1["gasPrice"] = + "0xa449dcaf2bca14e6bd0ac650eed9555008363002b2fc3a4c8422b7a9525a8135"; // gas 200k txPOW1["value"] = 1; string txHash = fixture.rpcClient->eth_sendTransaction( txPOW1 ); dev::eth::mineTransaction( *( fixture.client ), 1 ); @@ -2814,9 +3009,12 @@ BOOST_AUTO_TEST_CASE( powTxnGasLimit ) { txPOW2["to"] = "0x0000000000000000000000000000000000000033"; txPOW2["from"] = senderAddress; txPOW2["gas"] = "100000"; - txPOW2["gasPrice"] = "0xc5002ab03e1e7e196b3d0ffa9801e783fcd48d4c6d972f1389ab63f4e2d0bef0"; // gas 1m + txPOW2["gasPrice"] = + "0xc5002ab03e1e7e196b3d0ffa9801e783fcd48d4c6d972f1389ab63f4e2d0bef0"; // gas 1m txPOW2["value"] = 100; + BOOST_REQUIRE_THROW( fixture.rpcClient->eth_sendTransaction( txPOW2 ), jsonrpc::JsonRpcException ); // block gas limit reached + } BOOST_AUTO_TEST_CASE( EIP1898Calls ) { @@ -2860,56 +3058,68 @@ BOOST_AUTO_TEST_CASE( EIP1898Calls ) { eip1898BadFormed5["blockNumber"] = dev::h256::random().hex(); eip1898BadFormed5["requireCanonical"] = 228; + std::array wellFormedCalls = { eip1898WellFormed, eip1898WellFormed1, eip1898WellFormed2, eip1898WellFormed3 }; std::array badFormedCalls = { eip1898BadFormed, eip1898BadFormed1, eip1898BadFormed2, eip1898BadFormed3, eip1898BadFormed4, eip1898BadFormed5 }; + auto address = fixture.coinbase.address(); std::string response; - for (const auto& call: wellFormedCalls) { - BOOST_REQUIRE_NO_THROW(fixture.rpcClient->eth_getBalanceEIP1898( toJS( address ), call )); + for ( const auto& call : wellFormedCalls ) { + BOOST_REQUIRE_NO_THROW( fixture.rpcClient->eth_getBalanceEIP1898( toJS( address ), call ) ); } - for (const auto& call: badFormedCalls) { - BOOST_REQUIRE_THROW(fixture.rpcClient->eth_getBalanceEIP1898( toJS( address ), call ), jsonrpc::JsonRpcException); + for ( const auto& call : badFormedCalls ) { + BOOST_REQUIRE_THROW( fixture.rpcClient->eth_getBalanceEIP1898( toJS( address ), call ), + jsonrpc::JsonRpcException ); } + for (const auto& call: wellFormedCalls) { Json::Value transactionCallObject; transactionCallObject["to"] = "0x0000000000000000000000000000000000000005"; transactionCallObject["data"] = "0x0000000000000000000000000000000000000005"; - BOOST_REQUIRE_NO_THROW(fixture.rpcClient->eth_callEIP1898( transactionCallObject, call )); + BOOST_REQUIRE_NO_THROW( fixture.rpcClient->eth_callEIP1898( transactionCallObject, call ) ); } - for (const auto& call: badFormedCalls) { + for ( const auto& call : badFormedCalls ) { Json::Value transactionCallObject; transactionCallObject["to"] = "0x0000000000000000000000000000000000000005"; transactionCallObject["data"] = "0x0000000000000000000000000000000000000005"; - BOOST_REQUIRE_THROW(fixture.rpcClient->eth_callEIP1898( transactionCallObject, call ), jsonrpc::JsonRpcException); + BOOST_REQUIRE_THROW( fixture.rpcClient->eth_callEIP1898( transactionCallObject, call ), + jsonrpc::JsonRpcException ); } - for (const auto& call: wellFormedCalls) { - BOOST_REQUIRE_NO_THROW(fixture.rpcClient->eth_getCodeEIP1898( toJS( address ), call )); + for ( const auto& call : wellFormedCalls ) { + BOOST_REQUIRE_NO_THROW( fixture.rpcClient->eth_getCodeEIP1898( toJS( address ), call ) ); } - for (const auto& call: badFormedCalls) { - BOOST_REQUIRE_THROW(fixture.rpcClient->eth_getCodeEIP1898( toJS( address ), call ), jsonrpc::JsonRpcException); + for ( const auto& call : badFormedCalls ) { + BOOST_REQUIRE_THROW( fixture.rpcClient->eth_getCodeEIP1898( toJS( address ), call ), + jsonrpc::JsonRpcException ); } - for (const auto& call: wellFormedCalls) { - BOOST_REQUIRE_NO_THROW(fixture.rpcClient->eth_getStorageAtEIP1898( toJS( address ), toJS( address ), call )); + for ( const auto& call : wellFormedCalls ) { + BOOST_REQUIRE_NO_THROW( + fixture.rpcClient->eth_getStorageAtEIP1898( toJS( address ), toJS( address ), call ) ); } - for (const auto& call: badFormedCalls) { - BOOST_REQUIRE_THROW(fixture.rpcClient->eth_getStorageAtEIP1898( toJS( address ), toJS( address ), call ), jsonrpc::JsonRpcException); + for ( const auto& call : badFormedCalls ) { + BOOST_REQUIRE_THROW( + fixture.rpcClient->eth_getStorageAtEIP1898( toJS( address ), toJS( address ), call ), + jsonrpc::JsonRpcException ); } - for (const auto& call: wellFormedCalls) { - BOOST_REQUIRE_NO_THROW(fixture.rpcClient->eth_getTransactionCountEIP1898( toJS( address ), call )); + for ( const auto& call : wellFormedCalls ) { + BOOST_REQUIRE_NO_THROW( + fixture.rpcClient->eth_getTransactionCountEIP1898( toJS( address ), call ) ); } - for (const auto& call: badFormedCalls) { - BOOST_REQUIRE_THROW(fixture.rpcClient->eth_getTransactionCountEIP1898( toJS( address ), call ), jsonrpc::JsonRpcException); + for ( const auto& call : badFormedCalls ) { + BOOST_REQUIRE_THROW( + fixture.rpcClient->eth_getTransactionCountEIP1898( toJS( address ), call ), + jsonrpc::JsonRpcException ); } } @@ -2924,12 +3134,13 @@ BOOST_AUTO_TEST_CASE( eip2930Transactions ) { time_t eip1559PatchActivationTimestamp = time(nullptr) + 10; ret["skaleConfig"]["sChain"]["EIP1559TransactionsPatchTimestamp"] = eip1559PatchActivationTimestamp; + Json::FastWriter fastWriter; std::string config = fastWriter.write( ret ); JsonRpcFixture fixture( config ); dev::eth::simulateMining( *( fixture.client ), 20 ); - string senderAddress = toJS(fixture.coinbase.address()); + string senderAddress = toJS( fixture.coinbase.address() ); Json::Value txRefill; txRefill["to"] = "0xc868AF52a6549c773082A334E5AE232e0Ea3B513"; @@ -2949,10 +3160,16 @@ BOOST_AUTO_TEST_CASE( eip2930Transactions ) { BOOST_REQUIRE( !result.isMember( "yParity" ) ); BOOST_REQUIRE( !result.isMember( "accessList" ) ); - BOOST_REQUIRE( fixture.rpcClient->eth_getBalance( "0xc868AF52a6549c773082A334E5AE232e0Ea3B513", "latest" ) == "0x16345785d8a0000" ); + BOOST_REQUIRE( fixture.rpcClient->eth_getBalance( "0xc868AF52a6549c773082A334E5AE232e0Ea3B513", + "latest" ) == "0x16345785d8a0000" ); // try sending type1 txn before patchTimestmap - BOOST_REQUIRE_THROW( fixture.rpcClient->eth_sendRawTransaction( "0x01f8678197808504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b0180c001a01ebdc546c8b85511b7ba831f47c4981069d7af972d10b7dce2c57225cb5df6a7a055ae1e84fea41d37589eb740a0a93017a5cd0e9f10ee50f165bf4b1b4c78ddae" ), jsonrpc::JsonRpcException ); // INVALID_PARAMS + BOOST_REQUIRE_THROW( + fixture.rpcClient->eth_sendRawTransaction( + "0x01f8678197808504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b0180c001a01e" + "bdc546c8b85511b7ba831f47c4981069d7af972d10b7dce2c57225cb5df6a7a055ae1e84fea41d37589eb7" + "40a0a93017a5cd0e9f10ee50f165bf4b1b4c78ddae" ), + jsonrpc::JsonRpcException ); // INVALID_PARAMS sleep( 10 ); // force 1 block to update timestamp @@ -2967,21 +3184,29 @@ BOOST_AUTO_TEST_CASE( eip2930Transactions ) { BOOST_REQUIRE( receipt["status"] == string( "0x1" ) ); BOOST_REQUIRE( receipt["type"] == "0x0" ); - // send 1 WEI from 0xc868AF52a6549c773082A334E5AE232e0Ea3B513 to 0x7D36aF85A184E220A656525fcBb9A63B9ab3C12b - // encoded type 1 txn - txHash = fixture.rpcClient->eth_sendRawTransaction( "0x01f8678197808504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b0180c001a01ebdc546c8b85511b7ba831f47c4981069d7af972d10b7dce2c57225cb5df6a7a055ae1e84fea41d37589eb740a0a93017a5cd0e9f10ee50f165bf4b1b4c78ddae" ); + // send 1 WEI from 0xc868AF52a6549c773082A334E5AE232e0Ea3B513 to + // 0x7D36aF85A184E220A656525fcBb9A63B9ab3C12b encoded type 1 txn + txHash = fixture.rpcClient->eth_sendRawTransaction( + "0x01f8678197808504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b0180c001a01ebdc5" + "46c8b85511b7ba831f47c4981069d7af972d10b7dce2c57225cb5df6a7a055ae1e84fea41d37589eb740a0a930" + "17a5cd0e9f10ee50f165bf4b1b4c78ddae" ); auto pendingTransactions = fixture.rpcClient->eth_pendingTransactions(); - BOOST_REQUIRE( pendingTransactions.isArray() && pendingTransactions.size() == 1); + BOOST_REQUIRE( pendingTransactions.isArray() && pendingTransactions.size() == 1 ); BOOST_REQUIRE( pendingTransactions[0]["type"] == "0x1" ); - BOOST_REQUIRE( pendingTransactions[0].isMember( "yParity" ) && pendingTransactions[0].isMember( "accessList" ) ); + BOOST_REQUIRE( pendingTransactions[0].isMember( "yParity" ) && + pendingTransactions[0].isMember( "accessList" ) ); dev::eth::mineTransaction( *( fixture.client ), 1 ); // compare with txn hash from geth BOOST_REQUIRE( txHash == "0xc843560015a655b8f81f65a458be9019bdb5cd8e416b6329ca18f36de0b8244d" ); - BOOST_REQUIRE( dev::toHexPrefixed( fixture.client->transactions( 4 )[0].toBytes() ) == "0x01f8678197808504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b0180c001a01ebdc546c8b85511b7ba831f47c4981069d7af972d10b7dce2c57225cb5df6a7a055ae1e84fea41d37589eb740a0a93017a5cd0e9f10ee50f165bf4b1b4c78ddae" ); + BOOST_REQUIRE( dev::toHexPrefixed( fixture.client->transactions( 4 )[0].toBytes() ) == + "0x01f8678197808504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b0180c" + "001a01ebdc546c8b85511b7ba831f47c4981069d7af972d10b7dce2c57225cb5df6a7a055ae1e84" + "fea41d37589eb740a0a93017a5cd0e9f10ee50f165bf4b1b4c78ddae" ); - BOOST_REQUIRE( fixture.rpcClient->eth_getBalance( "0x7D36aF85A184E220A656525fcBb9A63B9ab3C12b", "latest" ) == "0x1" ); + BOOST_REQUIRE( fixture.rpcClient->eth_getBalance( + "0x7D36aF85A184E220A656525fcBb9A63B9ab3C12b", "latest" ) == "0x1" ); auto block = fixture.rpcClient->eth_getBlockByNumber( "4", false ); BOOST_REQUIRE( block["transactions"].size() == 1 ); @@ -2991,14 +3216,18 @@ BOOST_AUTO_TEST_CASE( eip2930Transactions ) { BOOST_REQUIRE( block["transactions"].size() == 1 ); BOOST_REQUIRE( block["transactions"][0]["hash"].asString() == txHash ); BOOST_REQUIRE( block["transactions"][0]["type"] == "0x1" ); + BOOST_REQUIRE( block["transactions"][0]["yParity"].asString() == block["transactions"][0]["v"].asString() ); + BOOST_REQUIRE( block["transactions"][0]["accessList"].isArray() ); BOOST_REQUIRE( block["transactions"][0]["accessList"].size() == 0 ); BOOST_REQUIRE( block["transactions"][0].isMember( "chainId" ) ); BOOST_REQUIRE( block["transactions"][0]["chainId"].asString() == chainID ); std::string blockHash = block["hash"].asString(); - BOOST_REQUIRE( fixture.client->transactionHashes( dev::h256( blockHash ) )[0] == dev::h256( "0xc843560015a655b8f81f65a458be9019bdb5cd8e416b6329ca18f36de0b8244d") ); + BOOST_REQUIRE( + fixture.client->transactionHashes( dev::h256( blockHash ) )[0] == + dev::h256( "0xc843560015a655b8f81f65a458be9019bdb5cd8e416b6329ca18f36de0b8244d" ) ); receipt = fixture.rpcClient->eth_getTransactionReceipt( txHash ); BOOST_REQUIRE( receipt["status"] == string( "0x1" ) ); @@ -3008,7 +3237,9 @@ BOOST_AUTO_TEST_CASE( eip2930Transactions ) { result = fixture.rpcClient->eth_getTransactionByHash( txHash ); BOOST_REQUIRE( result["hash"].asString() == txHash ); BOOST_REQUIRE( result["type"] == "0x1" ); + BOOST_REQUIRE( result["yParity"].asString() == result["v"].asString() ); + BOOST_REQUIRE( result["accessList"].isArray() ); BOOST_REQUIRE( result["accessList"].size() == 0 ); @@ -3021,45 +3252,73 @@ BOOST_AUTO_TEST_CASE( eip2930Transactions ) { result = fixture.rpcClient->eth_getTransactionByBlockNumberAndIndex( "0x4", "0x0" ); BOOST_REQUIRE( result["hash"].asString() == txHash ); BOOST_REQUIRE( result["type"] == "0x1" ); + BOOST_REQUIRE( result["yParity"].asString() == result["v"].asString() ); + BOOST_REQUIRE( result["accessList"].isArray() ); BOOST_REQUIRE( result["accessList"].size() == 0 ); // now the same txn with accessList and increased nonce - // [ { 'address': HexBytes( "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae" ), 'storageKeys': ( "0x0000000000000000000000000000000000000000000000000000000000000003", "0x0000000000000000000000000000000000000000000000000000000000000007" ) } ] - txHash = fixture.rpcClient->eth_sendRawTransaction( "0x01f8c38197018504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b0180f85bf85994de0b295669a9fd93d5f28d9ec85e40f4cb697baef842a00000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000780a0b03eaf481958e22fc39bd1d526eb9255be1e6625614f02ca939e51c3d7e64bcaa05f675640c04bb050d27bd1f39c07b6ff742311b04dab760bb3bc206054332879" ); + // [ { 'address': HexBytes( "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae" ), 'storageKeys': ( + // "0x0000000000000000000000000000000000000000000000000000000000000003", + // "0x0000000000000000000000000000000000000000000000000000000000000007" ) } ] + txHash = fixture.rpcClient->eth_sendRawTransaction( + "0x01f8c38197018504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b0180f85bf85994de" + "0b295669a9fd93d5f28d9ec85e40f4cb697baef842a00000000000000000000000000000000000000000000000" + "000000000000000003a0000000000000000000000000000000000000000000000000000000000000000780a0b0" + "3eaf481958e22fc39bd1d526eb9255be1e6625614f02ca939e51c3d7e64bcaa05f675640c04bb050d27bd1f39c" + "07b6ff742311b04dab760bb3bc206054332879" ); pendingTransactions = fixture.rpcClient->eth_pendingTransactions(); - BOOST_REQUIRE( pendingTransactions.isArray() && pendingTransactions.size() == 1); + BOOST_REQUIRE( pendingTransactions.isArray() && pendingTransactions.size() == 1 ); BOOST_REQUIRE( pendingTransactions[0]["type"] == "0x1" ); - BOOST_REQUIRE( pendingTransactions[0].isMember( "yParity" ) && pendingTransactions[0].isMember( "accessList" ) ); + BOOST_REQUIRE( pendingTransactions[0].isMember( "yParity" ) && + pendingTransactions[0].isMember( "accessList" ) ); dev::eth::mineTransaction( *( fixture.client ), 1 ); // compare with txn hash from geth BOOST_REQUIRE( txHash == "0xa6d3541e06dff71fb8344a4db2a4ad4e0b45024eb23a8f568982b70a5f50f94d" ); - BOOST_REQUIRE( dev::toHexPrefixed( fixture.client->transactions( 5 )[0].toBytes() ) == "0x01f8c38197018504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b0180f85bf85994de0b295669a9fd93d5f28d9ec85e40f4cb697baef842a00000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000780a0b03eaf481958e22fc39bd1d526eb9255be1e6625614f02ca939e51c3d7e64bcaa05f675640c04bb050d27bd1f39c07b6ff742311b04dab760bb3bc206054332879" ); + BOOST_REQUIRE( + dev::toHexPrefixed( fixture.client->transactions( 5 )[0].toBytes() ) == + "0x01f8c38197018504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b0180f85bf85994de" + "0b295669a9fd93d5f28d9ec85e40f4cb697baef842a00000000000000000000000000000000000000000000000" + "000000000000000003a0000000000000000000000000000000000000000000000000000000000000000780a0b0" + "3eaf481958e22fc39bd1d526eb9255be1e6625614f02ca939e51c3d7e64bcaa05f675640c04bb050d27bd1f39c" + "07b6ff742311b04dab760bb3bc206054332879" ); result = fixture.rpcClient->eth_getTransactionByHash( txHash ); BOOST_REQUIRE( result["type"] == "0x1" ); BOOST_REQUIRE( result["accessList"].isArray() ); BOOST_REQUIRE( result["accessList"].size() == 1 ); - BOOST_REQUIRE( result["accessList"][0].isObject() && result["accessList"][0].getMemberNames().size() == 2 ); - BOOST_REQUIRE( result["accessList"][0].isMember( "address" ) && result["accessList"][0].isMember( "storageKeys" ) ); - BOOST_REQUIRE( result["accessList"][0]["address"].asString() == "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae" ); - BOOST_REQUIRE( result["accessList"][0]["storageKeys"].isArray() && result["accessList"][0]["storageKeys"].size() == 2 ); - BOOST_REQUIRE( result["accessList"][0]["storageKeys"][0].asString() == "0x0000000000000000000000000000000000000000000000000000000000000003" ); - BOOST_REQUIRE( result["accessList"][0]["storageKeys"][1].asString() == "0x0000000000000000000000000000000000000000000000000000000000000007" ); + BOOST_REQUIRE( result["accessList"][0].isObject() && + result["accessList"][0].getMemberNames().size() == 2 ); + BOOST_REQUIRE( result["accessList"][0].isMember( "address" ) && + result["accessList"][0].isMember( "storageKeys" ) ); + BOOST_REQUIRE( result["accessList"][0]["address"].asString() == + "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae" ); + BOOST_REQUIRE( result["accessList"][0]["storageKeys"].isArray() && + result["accessList"][0]["storageKeys"].size() == 2 ); + BOOST_REQUIRE( result["accessList"][0]["storageKeys"][0].asString() == + "0x0000000000000000000000000000000000000000000000000000000000000003" ); + BOOST_REQUIRE( result["accessList"][0]["storageKeys"][1].asString() == + "0x0000000000000000000000000000000000000000000000000000000000000007" ); block = fixture.rpcClient->eth_getBlockByNumber( "5", true ); result = block["transactions"][0]; BOOST_REQUIRE( result["type"] == "0x1" ); BOOST_REQUIRE( result["accessList"].isArray() ); BOOST_REQUIRE( result["accessList"].size() == 1 ); - BOOST_REQUIRE( result["accessList"][0].isObject() && result["accessList"][0].getMemberNames().size() == 2 ); - BOOST_REQUIRE( result["accessList"][0].isMember( "address" ) && result["accessList"][0].isMember( "storageKeys" ) ); - BOOST_REQUIRE( result["accessList"][0]["address"].asString() == "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae" ); - BOOST_REQUIRE( result["accessList"][0]["storageKeys"].isArray() && result["accessList"][0]["storageKeys"].size() == 2 ); - BOOST_REQUIRE( result["accessList"][0]["storageKeys"][0].asString() == "0x0000000000000000000000000000000000000000000000000000000000000003" ); - BOOST_REQUIRE( result["accessList"][0]["storageKeys"][1].asString() == "0x0000000000000000000000000000000000000000000000000000000000000007" ); + BOOST_REQUIRE( result["accessList"][0].isObject() && + result["accessList"][0].getMemberNames().size() == 2 ); + BOOST_REQUIRE( result["accessList"][0].isMember( "address" ) && + result["accessList"][0].isMember( "storageKeys" ) ); + BOOST_REQUIRE( result["accessList"][0]["address"].asString() == + "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae" ); + BOOST_REQUIRE( result["accessList"][0]["storageKeys"].isArray() && + result["accessList"][0]["storageKeys"].size() == 2 ); + BOOST_REQUIRE( result["accessList"][0]["storageKeys"][0].asString() == + "0x0000000000000000000000000000000000000000000000000000000000000003" ); + BOOST_REQUIRE( result["accessList"][0]["storageKeys"][1].asString() == + "0x0000000000000000000000000000000000000000000000000000000000000007" ); } BOOST_AUTO_TEST_CASE( eip1559Transactions ) { @@ -3078,7 +3337,8 @@ BOOST_AUTO_TEST_CASE( eip1559Transactions ) { JsonRpcFixture fixture( config ); dev::eth::simulateMining( *( fixture.client ), 20 ); - string senderAddress = toJS(fixture.coinbase.address()); + fixture.client->state().getOriginalDb()->createBlockSnap( 2 ); + string senderAddress = toJS( fixture.coinbase.address() ); Json::Value txRefill; txRefill["to"] = "0x5EdF1e852fdD1B0Bc47C0307EF755C76f4B9c251"; @@ -3088,6 +3348,7 @@ BOOST_AUTO_TEST_CASE( eip1559Transactions ) { txRefill["value"] = 100000000000000000; string txHash = fixture.rpcClient->eth_sendTransaction( txRefill ); dev::eth::mineTransaction( *( fixture.client ), 1 ); + fixture.client->state().getOriginalDb()->createBlockSnap( 3 ); Json::Value receipt = fixture.rpcClient->eth_getTransactionReceipt( txHash ); BOOST_REQUIRE( receipt["status"] == string( "0x1" ) ); @@ -3098,10 +3359,18 @@ BOOST_AUTO_TEST_CASE( eip1559Transactions ) { BOOST_REQUIRE( !result.isMember( "yParity" ) ); BOOST_REQUIRE( !result.isMember( "accessList" ) ); - BOOST_REQUIRE( fixture.rpcClient->eth_getBalance( "0x5EdF1e852fdD1B0Bc47C0307EF755C76f4B9c251", "latest" ) == "0x16345785d8a0000" ); + BOOST_REQUIRE( fixture.rpcClient->eth_getBalance( "0x5EdF1e852fdD1B0Bc47C0307EF755C76f4B9c251", + "latest" ) == "0x16345785d8a0000" ); // try sending type2 txn before patchTimestmap - BOOST_REQUIRE_THROW( fixture.rpcClient->eth_sendRawTransaction( "0x02f8c98197808504a817c8008504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b0180f85bf85994de0b295669a9fd93d5f28d9ec85e40f4cb697baef842a00000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000780a0f1a407dfc1a9f782001d89f617e9b3a2f295378533784fb39960dea60beea2d0a05ac3da2946554ba3d5721850f4f89ee7a0c38e4acab7130908e7904d13174388" ), jsonrpc::JsonRpcException ); // INVALID_PARAMS + BOOST_REQUIRE_THROW( + fixture.rpcClient->eth_sendRawTransaction( + "0x02f8c98197808504a817c8018504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b" + "0180f85bf85994de0b295669a9fd93d5f28d9ec85e40f4cb697baef842a000000000000000000000000000" + "00000000000000000000000000000000000003a00000000000000000000000000000000000000000000000" + "00000000000000000701a005bd1eedc509a8e94cfcfc84d0b5fd53a0888a475274cbeee321047da5d139f8" + "a00e7f0dd8b5277766d447ea51b7d8f571dc8bb57ff95c068c58f5b6fe9089dde8" ), + jsonrpc::JsonRpcException ); // INVALID_PARAMS sleep( 10 ); // force 1 block to update timestamp @@ -3112,26 +3381,35 @@ BOOST_AUTO_TEST_CASE( eip1559Transactions ) { txRefill["value"] = 0; txHash = fixture.rpcClient->eth_sendTransaction( txRefill ); dev::eth::mineTransaction( *( fixture.client ), 1 ); + fixture.client->state().getOriginalDb()->createBlockSnap( 4 ); receipt = fixture.rpcClient->eth_getTransactionReceipt( txHash ); BOOST_REQUIRE( receipt["status"] == string( "0x1" ) ); BOOST_REQUIRE( receipt["type"] == "0x0" ); BOOST_REQUIRE( receipt["effectiveGasPrice"] == "0x4a817c800" ); - // send 1 WEI from 0x5EdF1e852fdD1B0Bc47C0307EF755C76f4B9c251 to 0x7D36aF85A184E220A656525fcBb9A63B9ab3C12b - // encoded type 2 txn - txHash = fixture.rpcClient->eth_sendRawTransaction( "0x02f8c98197808504a817c8018504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b0180f85bf85994de0b295669a9fd93d5f28d9ec85e40f4cb697baef842a00000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000701a005bd1eedc509a8e94cfcfc84d0b5fd53a0888a475274cbeee321047da5d139f8a00e7f0dd8b5277766d447ea51b7d8f571dc8bb57ff95c068c58f5b6fe9089dde8" ); + + // send 1 WEI from 0x5EdF1e852fdD1B0Bc47C0307EF755C76f4B9c251 to + // 0x7D36aF85A184E220A656525fcBb9A63B9ab3C12b encoded type 2 txn + txHash = fixture.rpcClient->eth_sendRawTransaction( + "0x02f8c98197808504a817c8018504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b0180f85bf85994de0b295669a9fd93d5f28d9ec85e40f4cb697baef842a00000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000701a005bd1eedc509a8e94cfcfc84d0b5fd53a0888a475274cbeee321047da5d139f8a00e7f0dd8b5277766d447ea51b7d8f571dc8bb57ff95c068c58f5b6fe9089dde8" ); + auto pendingTransactions = fixture.rpcClient->eth_pendingTransactions(); - BOOST_REQUIRE( pendingTransactions.isArray() && pendingTransactions.size() == 1); + BOOST_REQUIRE( pendingTransactions.isArray() && pendingTransactions.size() == 1 ); BOOST_REQUIRE( pendingTransactions[0]["type"] == "0x2" ); - BOOST_REQUIRE( pendingTransactions[0].isMember( "yParity" ) && pendingTransactions[0].isMember( "accessList" ) ); - BOOST_REQUIRE( pendingTransactions[0].isMember( "maxFeePerGas" ) && pendingTransactions[0].isMember( "maxPriorityFeePerGas" ) ); + BOOST_REQUIRE( pendingTransactions[0].isMember( "yParity" ) && + pendingTransactions[0].isMember( "accessList" ) ); + BOOST_REQUIRE( pendingTransactions[0].isMember( "maxFeePerGas" ) && + pendingTransactions[0].isMember( "maxPriorityFeePerGas" ) ); dev::eth::mineTransaction( *( fixture.client ), 1 ); // compare with txn hash from geth BOOST_REQUIRE( txHash == "0xde30b1c26b89e20f6426a87b9427381f9e79e2bb80f992a6f2e1b4dccfa345de" ); - BOOST_REQUIRE( dev::toHexPrefixed( fixture.client->transactions( 4 )[0].toBytes() ) == "0x02f8c98197808504a817c8018504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b0180f85bf85994de0b295669a9fd93d5f28d9ec85e40f4cb697baef842a00000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000701a005bd1eedc509a8e94cfcfc84d0b5fd53a0888a475274cbeee321047da5d139f8a00e7f0dd8b5277766d447ea51b7d8f571dc8bb57ff95c068c58f5b6fe9089dde8" ); + BOOST_REQUIRE( + dev::toHexPrefixed( fixture.client->transactions( 4 )[0].toBytes() ) == + "0x02f8c98197808504a817c8018504a817c800827530947d36af85a184e220a656525fcbb9a63b9ab3c12b0180f85bf85994de0b295669a9fd93d5f28d9ec85e40f4cb697baef842a00000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000701a005bd1eedc509a8e94cfcfc84d0b5fd53a0888a475274cbeee321047da5d139f8a00e7f0dd8b5277766d447ea51b7d8f571dc8bb57ff95c068c58f5b6fe9089dde8" ); - BOOST_REQUIRE( fixture.rpcClient->eth_getBalance( "0x7D36aF85A184E220A656525fcBb9A63B9ab3C12b", "latest" ) == "0x1" ); + BOOST_REQUIRE( fixture.rpcClient->eth_getBalance( + "0x7D36aF85A184E220A656525fcBb9A63B9ab3C12b", "latest" ) == "0x1" ); auto block = fixture.rpcClient->eth_getBlockByNumber( "4", false ); BOOST_REQUIRE( block["transactions"].size() == 1 ); @@ -3142,7 +3420,9 @@ BOOST_AUTO_TEST_CASE( eip1559Transactions ) { BOOST_REQUIRE( block["transactions"].size() == 1 ); BOOST_REQUIRE( block["transactions"][0]["hash"].asString() == txHash ); BOOST_REQUIRE( block["transactions"][0]["type"] == "0x2" ); + BOOST_REQUIRE( block["transactions"][0]["yParity"].asString() == block["transactions"][0]["v"].asString() ); + BOOST_REQUIRE( block["transactions"][0]["accessList"].isArray() ); BOOST_REQUIRE( block["transactions"][0].isMember( "chainId" ) ); BOOST_REQUIRE( block["transactions"][0]["chainId"].asString() == chainID ); @@ -3157,9 +3437,12 @@ BOOST_AUTO_TEST_CASE( eip1559Transactions ) { result = fixture.rpcClient->eth_getTransactionByHash( txHash ); BOOST_REQUIRE( result["hash"].asString() == txHash ); BOOST_REQUIRE( result["type"] == "0x2" ); + BOOST_REQUIRE( result["yParity"].asString() == result["v"].asString() ); + BOOST_REQUIRE( result["accessList"].isArray() ); - BOOST_REQUIRE( result.isMember( "maxPriorityFeePerGas" ) && result["maxPriorityFeePerGas"].isString() ); + BOOST_REQUIRE( + result.isMember( "maxPriorityFeePerGas" ) && result["maxPriorityFeePerGas"].isString() ); BOOST_REQUIRE( result.isMember( "maxFeePerGas" ) && result["maxFeePerGas"].isString() ); BOOST_REQUIRE( result["maxPriorityFeePerGas"] == "0x4a817c801" ); BOOST_REQUIRE( result["maxFeePerGas"] == "0x4a817c800" ); @@ -3167,7 +3450,9 @@ BOOST_AUTO_TEST_CASE( eip1559Transactions ) { result = fixture.rpcClient->eth_getTransactionByBlockHashAndIndex( blockHash, "0x0" ); BOOST_REQUIRE( result["hash"].asString() == txHash ); BOOST_REQUIRE( result["type"] == "0x2" ); + BOOST_REQUIRE( result["yParity"].asString() == result["v"].asString() ); + BOOST_REQUIRE( result["accessList"].isArray() ); BOOST_REQUIRE( result["maxPriorityFeePerGas"] == "0x4a817c801" ); BOOST_REQUIRE( result["maxFeePerGas"] == "0x4a817c800" ); @@ -3175,7 +3460,9 @@ BOOST_AUTO_TEST_CASE( eip1559Transactions ) { result = fixture.rpcClient->eth_getTransactionByBlockNumberAndIndex( "0x4", "0x0" ); BOOST_REQUIRE( result["hash"].asString() == txHash ); BOOST_REQUIRE( result["type"] == "0x2" ); + BOOST_REQUIRE( result["yParity"].asString() == result["v"].asString() ); + BOOST_REQUIRE( result["accessList"].isArray() ); BOOST_REQUIRE( result["maxPriorityFeePerGas"] == "0x4a817c801" ); BOOST_REQUIRE( result["maxFeePerGas"] == "0x4a817c800" ); @@ -3196,7 +3483,7 @@ BOOST_AUTO_TEST_CASE( eip2930RpcMethods ) { JsonRpcFixture fixture( config ); dev::eth::simulateMining( *( fixture.client ), 20 ); - string senderAddress = toJS(fixture.coinbase.address()); + string senderAddress = toJS( fixture.coinbase.address() ); Json::Value txRefill; txRefill["to"] = "0x5EdF1e852fdD1B0Bc47C0307EF755C76f4B9c251"; @@ -3224,15 +3511,16 @@ BOOST_AUTO_TEST_CASE( eip1559RpcMethods ) { // Set chainID = 151 ret["params"]["chainID"] = "0x97"; - time_t eip1559PatchActivationTimestamp = time(nullptr) + 5; - ret["skaleConfig"]["sChain"]["EIP1559TransactionsPatchTimestamp"] = eip1559PatchActivationTimestamp; + time_t eip1559PatchActivationTimestamp = time( nullptr ) + 5; + ret["skaleConfig"]["sChain"]["EIP1559TransactionsPatchTimestamp"] = + eip1559PatchActivationTimestamp; Json::FastWriter fastWriter; std::string config = fastWriter.write( ret ); JsonRpcFixture fixture( config ); dev::eth::simulateMining( *( fixture.client ), 20 ); - string senderAddress = toJS(fixture.coinbase.address()); + string senderAddress = toJS( fixture.coinbase.address() ); Json::Value txRefill; txRefill["to"] = "0x5EdF1e852fdD1B0Bc47C0307EF755C76f4B9c251"; @@ -3240,7 +3528,7 @@ BOOST_AUTO_TEST_CASE( eip1559RpcMethods ) { txRefill["gas"] = "100000"; txRefill["gasPrice"] = fixture.rpcClient->eth_gasPrice(); txRefill["value"] = 100000000000000000; - for (size_t i = 0; i < 10; ++i) { + for ( size_t i = 0; i < 10; ++i ) { // mine 10 blocks string txHash = fixture.rpcClient->eth_sendTransaction( txRefill ); dev::eth::mineTransaction( *( fixture.client ), 1 ); @@ -3263,10 +3551,13 @@ BOOST_AUTO_TEST_CASE( eip1559RpcMethods ) { BOOST_REQUIRE( feeHistory.isMember( "baseFeePerGas" ) ); BOOST_REQUIRE( feeHistory["baseFeePerGas"].isArray() ); - for (Json::Value::ArrayIndex i = 0; i < blockCnt; ++i) { + for ( Json::Value::ArrayIndex i = 0; i < blockCnt; ++i ) { BOOST_REQUIRE( feeHistory["baseFeePerGas"][i].isString() ); - std::string estimatedBaseFeePerGas = EIP1559TransactionsPatch::isEnabledWhen( - fixture.client->blockInfo( bn - i - 1 ).timestamp() ) ? toJS( fixture.client->gasBidPrice( bn - i - 1 ) ) : toJS( 0 ); + std::string estimatedBaseFeePerGas = + EIP1559TransactionsPatch::isEnabledWhen( + fixture.client->blockInfo( bn - i - 1 ).timestamp() ) ? + toJS( fixture.client->gasBidPrice( bn - i - 1 ) ) : + toJS( 0 ); BOOST_REQUIRE( feeHistory["baseFeePerGas"][i].asString() == estimatedBaseFeePerGas ); BOOST_REQUIRE_GT( feeHistory["gasUsedRatio"][i].asDouble(), 0 ); BOOST_REQUIRE_GT( 1, feeHistory["gasUsedRatio"][i].asDouble() ); @@ -3338,12 +3629,10 @@ BOOST_AUTO_TEST_CASE( vInTxnSignature ) { } BOOST_AUTO_TEST_CASE( etherbase_generation2 ) { - JsonRpcFixture fixture(c_genesisGeneration2ConfigString, false, false, true); + JsonRpcFixture fixture( c_genesisGeneration2ConfigString, false, false, true ); string etherbase = fixture.rpcClient->eth_coinbase(); - // before mining u256 etherbaseBalance = fixture.client->balanceAt( jsToAddress( etherbase ) ); - BOOST_REQUIRE_EQUAL( etherbaseBalance, 0 ); // mine block without transactions dev::eth::simulateMining( *( fixture.client ), 1 ); @@ -3360,14 +3649,25 @@ BOOST_AUTO_TEST_CASE( etherbase_generation2 ) { std::string txHash = fixture.rpcClient->eth_sendTransaction( sampleTx ); BOOST_REQUIRE( !txHash.empty() ); dev::eth::mineTransaction( *( fixture.client ), 1 ); + fixture.client->state().getOriginalDb()->createBlockSnap( 2 ); BOOST_REQUIRE_EQUAL( fixture.client->balanceAt( fixture.account2.address() ), u256( 1000000 ) ); // partially retrieve 1000000 etherbaseBalance = fixture.client->balanceAt( jsToAddress( etherbase ) ); - u256 balance = fixture.client->balanceAt( jsToAddress( "0x7aa5E36AA15E93D10F4F26357C30F052DacDde5F" ) ); + u256 balance = + fixture.client->balanceAt( jsToAddress( "0x7aa5E36AA15E93D10F4F26357C30F052DacDde5F" ) ); Json::Value partiallyRetrieveTx; - partiallyRetrieveTx["data"] = "0xc6427474000000000000000000000000d2c0deface0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e4b61d27f6000000000000000000000000d2ba3e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044204a3e930000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f00000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + partiallyRetrieveTx["data"] = + "0xc6427474000000000000000000000000d2c0deface0000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000006000000000000000000000000000000000000000000000000000000000000000e4b61d" + "27f6000000000000000000000000d2ba3e00000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000600000000000000000000000000000000000000000000000000000000000000044204a3e9300" + "00000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f0000000000000000000000000000" + "0000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000"; partiallyRetrieveTx["from"] = "0x5C4e11842E8be09264dc1976943571d7Af6d00F9"; partiallyRetrieveTx["to"] = "0xD244519000000000000000000000000000000000"; partiallyRetrieveTx["gasPrice"] = fixture.rpcClient->eth_gasPrice(); @@ -3375,16 +3675,32 @@ BOOST_AUTO_TEST_CASE( etherbase_generation2 ) { txHash = fixture.rpcClient->eth_sendTransaction( partiallyRetrieveTx ); BOOST_REQUIRE( !txHash.empty() ); dev::eth::mineTransaction( *( fixture.client ), 1 ); + fixture.client->state().getOriginalDb()->createBlockSnap( 3 ); auto t = fixture.rpcClient->eth_getTransactionReceipt( txHash ); - BOOST_REQUIRE_EQUAL( fixture.client->balanceAt( jsToAddress( etherbase ) ), etherbaseBalance + jsToU256( t["gasUsed"].asString() ) * jsToU256( partiallyRetrieveTx["gasPrice"].asString() )- u256( 1000000 ) ); - BOOST_REQUIRE_EQUAL( fixture.client->balanceAt( jsToAddress( "0x7aa5E36AA15E93D10F4F26357C30F052DacDde5F" ) ), balance + u256( 1000000 ) ); + BOOST_REQUIRE_EQUAL( fixture.client->balanceAt( jsToAddress( etherbase ) ), + etherbaseBalance + + jsToU256( t["gasUsed"].asString() ) * + jsToU256( partiallyRetrieveTx["gasPrice"].asString() ) - + u256( 1000000 ) ); + BOOST_REQUIRE_EQUAL( + fixture.client->balanceAt( jsToAddress( "0x7aa5E36AA15E93D10F4F26357C30F052DacDde5F" ) ), + balance + u256( 1000000 ) ); // retrieve all u256 oldEtherbaseBalance = fixture.client->balanceAt( jsToAddress( etherbase ) ); - balance = fixture.client->balanceAt( jsToAddress( "0x7aa5E36AA15E93D10F4F26357C30F052DacDde5F" ) ); + balance = + fixture.client->balanceAt( jsToAddress( "0x7aa5E36AA15E93D10F4F26357C30F052DacDde5F" ) ); Json::Value retrieveTx; - retrieveTx["data"] = "0xc6427474000000000000000000000000d2c0deface0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c4b61d27f6000000000000000000000000d2ba3e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000240a79309b0000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + retrieveTx["data"] = + "0xc6427474000000000000000000000000d2c0deface0000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000006000000000000000000000000000000000000000000000000000000000000000c4b61d" + "27f6000000000000000000000000d2ba3e00000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000006000000000000000000000000000000000000000000000000000000000000000240a79309b00" + "00000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f0000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; retrieveTx["from"] = "0x5C4e11842E8be09264dc1976943571d7Af6d00F9"; retrieveTx["to"] = "0xD244519000000000000000000000000000000000"; retrieveTx["gasPrice"] = fixture.rpcClient->eth_gasPrice(); @@ -3392,29 +3708,37 @@ BOOST_AUTO_TEST_CASE( etherbase_generation2 ) { txHash = fixture.rpcClient->eth_sendTransaction( retrieveTx ); BOOST_REQUIRE( !txHash.empty() ); dev::eth::mineTransaction( *( fixture.client ), 1 ); + fixture.client->state().getOriginalDb()->createBlockSnap( 4 ); t = fixture.rpcClient->eth_getTransactionReceipt( txHash ); etherbaseBalance = fixture.client->balanceAt( jsToAddress( etherbase ) ); - BOOST_REQUIRE_EQUAL( jsToU256( t["gasUsed"].asString() ) * jsToU256( partiallyRetrieveTx["gasPrice"].asString() ), etherbaseBalance ); - BOOST_REQUIRE_EQUAL( fixture.client->balanceAt( jsToAddress( "0x7aa5E36AA15E93D10F4F26357C30F052DacDde5F" ) ), balance + oldEtherbaseBalance ); + BOOST_REQUIRE_EQUAL( jsToU256( t["gasUsed"].asString() ) * + jsToU256( partiallyRetrieveTx["gasPrice"].asString() ), + etherbaseBalance ); + BOOST_REQUIRE_EQUAL( + fixture.client->balanceAt( jsToAddress( "0x7aa5E36AA15E93D10F4F26357C30F052DacDde5F" ) ), + balance + oldEtherbaseBalance ); } BOOST_AUTO_TEST_CASE( deploy_controller_generation2 ) { - JsonRpcFixture fixture(c_genesisGeneration2ConfigString, false, false, true); + JsonRpcFixture fixture( c_genesisGeneration2ConfigString, false, false, true ); Json::Value hasRoleBeforeGrantingCall; - hasRoleBeforeGrantingCall["data"] = "0x91d14854fc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c0000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f"; + hasRoleBeforeGrantingCall["data"] = + "0x91d14854fc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c0000000000000000" + "000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f"; hasRoleBeforeGrantingCall["to"] = "0xD2002000000000000000000000000000000000d2"; - BOOST_REQUIRE( jsToInt( fixture.rpcClient->eth_call( hasRoleBeforeGrantingCall, "latest" ) ) == 0 ); + BOOST_REQUIRE( + jsToInt( fixture.rpcClient->eth_call( hasRoleBeforeGrantingCall, "latest" ) ) == 0 ); string compiled = - "6080604052341561000f57600080fd5b60b98061001d6000396000f300" - "608060405260043610603f576000357c01000000000000000000000000" - "00000000000000000000000000000000900463ffffffff168063b3de64" - "8b146044575b600080fd5b3415604e57600080fd5b606a600480360381" - "019080803590602001909291905050506080565b604051808281526020" - "0191505060405180910390f35b60006007820290509190505600a16562" - "7a7a72305820f294e834212334e2978c6dd090355312a3f0f9476b8eb9" - "8fb480406fc2728a960029"; + "6080604052341561000f57600080fd5b60b98061001d6000396000f300" + "608060405260043610603f576000357c01000000000000000000000000" + "00000000000000000000000000000000900463ffffffff168063b3de64" + "8b146044575b600080fd5b3415604e57600080fd5b606a600480360381" + "019080803590602001909291905050506080565b604051808281526020" + "0191505060405180910390f35b60006007820290509190505600a16562" + "7a7a72305820f294e834212334e2978c6dd090355312a3f0f9476b8eb9" + "8fb480406fc2728a960029"; Json::Value deployContractWithoutRoleTx; deployContractWithoutRoleTx["from"] = "0x7aa5e36aa15e93d10f4f26357c30f052dacdde5f"; @@ -3428,12 +3752,20 @@ BOOST_AUTO_TEST_CASE( deploy_controller_generation2 ) { Json::Value receipt = fixture.rpcClient->eth_getTransactionReceipt( txHash ); BOOST_REQUIRE_EQUAL( receipt["status"], string( "0x0" ) ); Json::Value code = - fixture.rpcClient->eth_getCode( receipt["contractAddress"].asString(), "latest" ); + fixture.rpcClient->eth_getCode( receipt["contractAddress"].asString(), "latest" ); BOOST_REQUIRE( code.asString() == "0x" ); // grant deployer role to 0x7aa5e36aa15e93d10f4f26357c30f052dacdde5f Json::Value grantDeployerRoleTx; - grantDeployerRoleTx["data"] = "0xc6427474000000000000000000000000d2c0deface0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c4b61d27f6000000000000000000000000d2002000000000000000000000000000000000d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024e43252d70000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + grantDeployerRoleTx["data"] = + "0xc6427474000000000000000000000000d2c0deface0000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000006000000000000000000000000000000000000000000000000000000000000000c4b61d" + "27f6000000000000000000000000d2002000000000000000000000000000000000d20000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000600000000000000000000000000000000000000000000000000000000000000024e43252d700" + "00000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f0000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; grantDeployerRoleTx["from"] = "0x5C4e11842E8be09264dc1976943571d7Af6d00F9"; grantDeployerRoleTx["to"] = "0xD244519000000000000000000000000000000000"; grantDeployerRoleTx["gasPrice"] = fixture.rpcClient->eth_gasPrice(); @@ -3443,7 +3775,9 @@ BOOST_AUTO_TEST_CASE( deploy_controller_generation2 ) { dev::eth::mineTransaction( *( fixture.client ), 1 ); Json::Value hasRoleCall; - hasRoleCall["data"] = "0x91d14854fc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c0000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f"; + hasRoleCall["data"] = + "0x91d14854fc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c0000000000000000" + "000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f"; hasRoleCall["to"] = "0xD2002000000000000000000000000000000000d2"; BOOST_REQUIRE( jsToInt( fixture.rpcClient->eth_call( hasRoleCall, "latest" ) ) == 1 ); @@ -3468,7 +3802,6 @@ BOOST_AUTO_TEST_CASE( deploy_controller_generation2 ) { } BOOST_AUTO_TEST_CASE( deployment_control_v2 ) { - // Inserting ConfigController mockup into config and enabling flexibleDeploymentPatch. // ConfigController mockup contract: @@ -3510,6 +3843,7 @@ BOOST_AUTO_TEST_CASE( deployment_control_v2 ) { "925092905056fea2646970667358221220b5f971b16f7bbba22272b220" "7e02f10abf1682c17fe636c7bf6406c5cae5716064736f6c63430008090033"; + std::string _config = c_genesisGeneration2ConfigString; Json::Value ret; Json::Reader().parse( _config, ret ); @@ -3518,7 +3852,7 @@ BOOST_AUTO_TEST_CASE( deployment_control_v2 ) { Json::FastWriter fastWriter; std::string config = fastWriter.write( ret ); - JsonRpcFixture fixture(config, false, false, true ); + JsonRpcFixture fixture( config, false, false, true ); Address senderAddress = fixture.coinbase.address(); fixture.client->setAuthor( senderAddress ); @@ -3527,14 +3861,14 @@ BOOST_AUTO_TEST_CASE( deployment_control_v2 ) { // } string compiled = - "6080604052341561000f57600080fd5b60b98061001d6000396000f300" - "608060405260043610603f576000357c01000000000000000000000000" - "00000000000000000000000000000000900463ffffffff168063b3de64" - "8b146044575b600080fd5b3415604e57600080fd5b606a600480360381" - "019080803590602001909291905050506080565b604051808281526020" - "0191505060405180910390f35b60006007820290509190505600a16562" - "7a7a72305820f294e834212334e2978c6dd090355312a3f0f9476b8eb9" - "8fb480406fc2728a960029"; + "6080604052341561000f57600080fd5b60b98061001d6000396000f300" + "608060405260043610603f576000357c01000000000000000000000000" + "00000000000000000000000000000000900463ffffffff168063b3de64" + "8b146044575b600080fd5b3415604e57600080fd5b606a600480360381" + "019080803590602001909291905050506080565b604051808281526020" + "0191505060405180910390f35b60006007820290509190505600a16562" + "7a7a72305820f294e834212334e2978c6dd090355312a3f0f9476b8eb9" + "8fb480406fc2728a960029"; // Trying to deploy contract without permission @@ -3551,7 +3885,7 @@ BOOST_AUTO_TEST_CASE( deployment_control_v2 ) { BOOST_REQUIRE_EQUAL( receipt["status"], string( "0x0" ) ); Json::Value code = - fixture.rpcClient->eth_getCode( receipt["contractAddress"].asString(), "latest" ); + fixture.rpcClient->eth_getCode( receipt["contractAddress"].asString(), "latest" ); BOOST_REQUIRE( code.asString() == "0x" ); // Allow to deploy by calling setFreeContractDeployment() @@ -3583,15 +3917,20 @@ BOOST_AUTO_TEST_CASE( deployment_control_v2 ) { } BOOST_AUTO_TEST_CASE( filestorage_generation2 ) { - JsonRpcFixture fixture(c_genesisGeneration2ConfigString, false, false, true); + JsonRpcFixture fixture( c_genesisGeneration2ConfigString, false, false, true ); Json::Value hasRoleBeforeGrantingCall; - hasRoleBeforeGrantingCall["data"] = "0x91d1485468bf109b95a5c15fb2bb99041323c27d15f8675e11bf7420a1cd6ad64c394f460000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f"; + hasRoleBeforeGrantingCall["data"] = + "0x91d1485468bf109b95a5c15fb2bb99041323c27d15f8675e11bf7420a1cd6ad64c394f460000000000000000" + "000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f"; hasRoleBeforeGrantingCall["to"] = "0xD3002000000000000000000000000000000000d3"; - BOOST_REQUIRE( jsToInt( fixture.rpcClient->eth_call( hasRoleBeforeGrantingCall, "latest" ) ) == 0 ); + BOOST_REQUIRE( + jsToInt( fixture.rpcClient->eth_call( hasRoleBeforeGrantingCall, "latest" ) ) == 0 ); Json::Value reserveSpaceBeforeGrantRoleTx; - reserveSpaceBeforeGrantRoleTx["data"] = "0x1cfe4e3b0000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f0000000000000000000000000000000000000000000000000000000000000064"; + reserveSpaceBeforeGrantRoleTx["data"] = + "0x1cfe4e3b0000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f0000000000000000" + "000000000000000000000000000000000000000000000064"; reserveSpaceBeforeGrantRoleTx["from"] = "0x7aa5e36aa15e93d10f4f26357c30f052dacdde5f"; reserveSpaceBeforeGrantRoleTx["to"] = "0xD3002000000000000000000000000000000000d3"; reserveSpaceBeforeGrantRoleTx["gasPrice"] = fixture.rpcClient->eth_gasPrice(); @@ -3603,7 +3942,16 @@ BOOST_AUTO_TEST_CASE( filestorage_generation2 ) { BOOST_REQUIRE_EQUAL( receipt["status"], string( "0x0" ) ); Json::Value grantRoleTx; - grantRoleTx["data"] = "0xc6427474000000000000000000000000d2c0deface0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e4b61d27f6000000000000000000000000d3002000000000000000000000000000000000d30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000442f2ff15d68bf109b95a5c15fb2bb99041323c27d15f8675e11bf7420a1cd6ad64c394f460000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + grantRoleTx["data"] = + "0xc6427474000000000000000000000000d2c0deface0000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000006000000000000000000000000000000000000000000000000000000000000000e4b61d" + "27f6000000000000000000000000d3002000000000000000000000000000000000d30000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000006000000000000000000000000000000000000000000000000000000000000000442f2ff15d68" + "bf109b95a5c15fb2bb99041323c27d15f8675e11bf7420a1cd6ad64c394f460000000000000000000000007aa5" + "e36aa15e93d10f4f26357c30f052dacdde5f000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000"; grantRoleTx["from"] = "0x5C4e11842E8be09264dc1976943571d7Af6d00F9"; grantRoleTx["to"] = "0xD244519000000000000000000000000000000000"; grantRoleTx["gasPrice"] = fixture.rpcClient->eth_gasPrice(); @@ -3615,12 +3963,16 @@ BOOST_AUTO_TEST_CASE( filestorage_generation2 ) { BOOST_REQUIRE_EQUAL( receipt["status"], string( "0x1" ) ); Json::Value hasRoleCall; - hasRoleCall["data"] = "0x91d1485468bf109b95a5c15fb2bb99041323c27d15f8675e11bf7420a1cd6ad64c394f460000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f"; + hasRoleCall["data"] = + "0x91d1485468bf109b95a5c15fb2bb99041323c27d15f8675e11bf7420a1cd6ad64c394f460000000000000000" + "000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f"; hasRoleCall["to"] = "0xD3002000000000000000000000000000000000d3"; BOOST_REQUIRE( jsToInt( fixture.rpcClient->eth_call( hasRoleCall, "latest" ) ) == 1 ); Json::Value reserveSpaceTx; - reserveSpaceTx["data"] = "0x1cfe4e3b0000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f0000000000000000000000000000000000000000000000000000000000000064"; + reserveSpaceTx["data"] = + "0x1cfe4e3b0000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f0000000000000000" + "000000000000000000000000000000000000000000000064"; reserveSpaceTx["from"] = "0x7aa5e36aa15e93d10f4f26357c30f052dacdde5f"; reserveSpaceTx["to"] = "0xD3002000000000000000000000000000000000d3"; reserveSpaceTx["gasPrice"] = fixture.rpcClient->eth_gasPrice(); @@ -3632,50 +3984,64 @@ BOOST_AUTO_TEST_CASE( filestorage_generation2 ) { BOOST_REQUIRE_EQUAL( receipt["status"], string( "0x1" ) ); Json::Value getReservedSpaceCall; - hasRoleCall["data"] = "0xbb559d160000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f"; + hasRoleCall["data"] = + "0xbb559d160000000000000000000000007aa5e36aa15e93d10f4f26357c30f052dacdde5f"; hasRoleCall["to"] = "0xD3002000000000000000000000000000000000d3"; BOOST_REQUIRE( jsToInt( fixture.rpcClient->eth_call( hasRoleCall, "latest" ) ) == 100 ); } -BOOST_AUTO_TEST_CASE( PrecompiledPrintFakeEth, *boost::unit_test::precondition( []( unsigned long ) -> bool { return false; } ) ) { - JsonRpcFixture fixture(c_genesisConfigString, false, false); +BOOST_AUTO_TEST_CASE( PrecompiledPrintFakeEth, + *boost::unit_test::precondition( []( unsigned long ) -> bool { return false; } ) ) { + JsonRpcFixture fixture( c_genesisConfigString, false, false ); dev::eth::simulateMining( *( fixture.client ), 20 ); - fixture.accountHolder->setAccounts( {fixture.coinbase, fixture.account2, dev::KeyPair(dev::Secret("0x1c2cd4b70c2b8c6cd7144bbbfbd1e5c6eacb4a5efd9c86d0e29cbbec4e8483b9"))} ); + fixture.accountHolder->setAccounts( { fixture.coinbase, fixture.account2, + dev::KeyPair( dev::Secret( + "0x1c2cd4b70c2b8c6cd7144bbbfbd1e5c6eacb4a5efd9c86d0e29cbbec4e8483b9" ) ) } ); - u256 balance = fixture.client->balanceAt( jsToAddress( "0x5C4e11842E8Be09264DC1976943571D7AF6d00f8" ) ); + u256 balance = + fixture.client->balanceAt( jsToAddress( "0x5C4e11842E8Be09264DC1976943571D7AF6d00f8" ) ); BOOST_REQUIRE_EQUAL( balance, 0 ); Json::Value printFakeEthFromDisallowedAddressTx; - printFakeEthFromDisallowedAddressTx["data"] = "0x5C4e11842E8Be09264DC1976943571D7AF6d00f80000000000000000000000000000000000000000000000000000000000000010"; + printFakeEthFromDisallowedAddressTx["data"] = + "0x5C4e11842E8Be09264DC1976943571D7AF6d00f8000000000000000000000000000000000000000000000000" + "0000000000000010"; printFakeEthFromDisallowedAddressTx["from"] = fixture.coinbase.address().hex(); printFakeEthFromDisallowedAddressTx["to"] = "0000000000000000000000000000000000000006"; printFakeEthFromDisallowedAddressTx["gasPrice"] = fixture.rpcClient->eth_gasPrice(); fixture.rpcClient->eth_sendTransaction( printFakeEthFromDisallowedAddressTx ); dev::eth::mineTransaction( *( fixture.client ), 1 ); - balance = fixture.client->balanceAt( jsToAddress( "0x5C4e11842E8Be09264DC1976943571D7AF6d00f8" ) ); + balance = + fixture.client->balanceAt( jsToAddress( "0x5C4e11842E8Be09264DC1976943571D7AF6d00f8" ) ); BOOST_REQUIRE_EQUAL( balance, 0 ); Json::Value printFakeEthTx; - printFakeEthTx["data"] = "0x5C4e11842E8Be09264DC1976943571D7AF6d00f80000000000000000000000000000000000000000000000000000000000000010"; + printFakeEthTx["data"] = + "0x5C4e11842E8Be09264DC1976943571D7AF6d00f8000000000000000000000000000000000000000000000000" + "0000000000000010"; printFakeEthTx["from"] = "0x5C4e11842E8be09264dc1976943571d7Af6d00F9"; printFakeEthTx["to"] = "0000000000000000000000000000000000000006"; printFakeEthTx["gasPrice"] = fixture.rpcClient->eth_gasPrice(); fixture.rpcClient->eth_sendTransaction( printFakeEthTx ); dev::eth::mineTransaction( *( fixture.client ), 1 ); - balance = fixture.client->balanceAt( jsToAddress( "0x5C4e11842E8Be09264DC1976943571D7AF6d00f8" ) ); + balance = + fixture.client->balanceAt( jsToAddress( "0x5C4e11842E8Be09264DC1976943571D7AF6d00f8" ) ); BOOST_REQUIRE_EQUAL( balance, 16 ); Json::Value printFakeEthCall; + printFakeEthCall["data"] = "0x5C4e11842E8Be09264DC1976943571D7AF6d00f80000000000000000000000000000000000000000000000000000000000000010"; + printFakeEthCall["from"] = "0x5C4e11842E8be09264dc1976943571d7Af6d00F9"; printFakeEthCall["to"] = "0000000000000000000000000000000000000006"; printFakeEthCall["gasPrice"] = fixture.rpcClient->eth_gasPrice(); fixture.rpcClient->eth_call( printFakeEthCall, "latest" ); - balance = fixture.client->balanceAt( jsToAddress( "0x5C4e11842E8Be09264DC1976943571D7AF6d00f8" ) ); + balance = + fixture.client->balanceAt( jsToAddress( "0x5C4e11842E8Be09264DC1976943571D7AF6d00f8" ) ); BOOST_REQUIRE_EQUAL( balance, 16 ); // pragma solidity ^0.4.25; @@ -3694,7 +4060,12 @@ BOOST_AUTO_TEST_CASE( PrecompiledPrintFakeEth, *boost::unit_test::precondition( // } // } - string compiled = "0x6080604052348015600f57600080fd5b5060a78061001e6000396000f30060806040526004361060225760003560e01c63ffffffff16806328b5e32b146027575b600080fd5b348015603257600080fd5b506039603b565b005b600080600060109150735c4e11842e8be09264dc1976943571d7af6d00f890506040518181528260208201526020816040836006600019f49350505050505600a165627a7a72305820c99b5f7e9e41fb0fee1724d382ca0f2c003087f66b3b46037ca6c7d452b076f20029"; + string compiled = + "0x6080604052348015600f57600080fd5b5060a78061001e6000396000f3006080604052600436106022576000" + "3560e01c63ffffffff16806328b5e32b146027575b600080fd5b348015603257600080fd5b506039603b565b00" + "5b600080600060109150735c4e11842e8be09264dc1976943571d7af6d00f89050604051818152826020820152" + "6020816040836006600019f49350505050505600a165627a7a72305820c99b5f7e9e41fb0fee1724d382ca0f2c" + "003087f66b3b46037ca6c7d452b076f20029"; Json::Value create; create["from"] = fixture.coinbase.address().hex(); @@ -3717,7 +4088,8 @@ BOOST_AUTO_TEST_CASE( PrecompiledPrintFakeEth, *boost::unit_test::precondition( transactionCallObject["data"] = "0x28b5e32b"; fixture.rpcClient->eth_call( transactionCallObject, "latest" ); - balance = fixture.client->balanceAt( jsToAddress( "0x5C4e11842E8Be09264DC1976943571D7AF6d00f8" ) ); + balance = + fixture.client->balanceAt( jsToAddress( "0x5C4e11842E8Be09264DC1976943571D7AF6d00f8" ) ); BOOST_REQUIRE_EQUAL( balance, 16 ); } @@ -3747,13 +4119,13 @@ BOOST_AUTO_TEST_CASE( mtm_import_sequential_txs ) { pair< bool, Secret > ar3 = fixture.accountHolder->authenticate( ts3 ); Transaction tx3( ts3, ar3.second ); - h256 h1 = fixture.client->importTransaction( tx1 ); - h256 h2 = fixture.client->importTransaction( tx2 ); - h256 h3 = fixture.client->importTransaction( tx3 ); + h256 h1 = fixture.client->importTransaction( tx1, TransactionBroadcast::DontBroadcast ); + h256 h2 = fixture.client->importTransaction( tx2, TransactionBroadcast::DontBroadcast); + h256 h3 = fixture.client->importTransaction( tx3, TransactionBroadcast::DontBroadcast); BOOST_REQUIRE( h1 ); BOOST_REQUIRE( h2 ); BOOST_REQUIRE( h3 ); - BOOST_REQUIRE( fixture.client->transactionQueueStatus().current == 3); + BOOST_REQUIRE( fixture.client->transactionQueueStatus().current == 3 ); } BOOST_AUTO_TEST_CASE( mtm_import_future_txs ) { @@ -3798,53 +4170,58 @@ BOOST_AUTO_TEST_CASE( mtm_import_future_txs ) { h256 h1 = fixture.client->importTransaction( tx5 ); BOOST_REQUIRE( h1 ); - BOOST_REQUIRE_EQUAL( tq->futureSize(), 1); + BOOST_REQUIRE_EQUAL( tq->futureSize(), 1 ); Json::Value call = fixture.rpcClient->debug_getFutureTransactions(); - BOOST_REQUIRE_EQUAL( call.size(), 1); + BOOST_REQUIRE_EQUAL( call.size(), 1 ); h256 h2 = fixture.client->importTransaction( tx3 ); BOOST_REQUIRE( h2 ); - BOOST_REQUIRE_EQUAL( tq->futureSize(), 2); + BOOST_REQUIRE_EQUAL( tq->futureSize(), 2 ); call = fixture.rpcClient->debug_getFutureTransactions(); - BOOST_REQUIRE_EQUAL( call.size(), 2); - BOOST_REQUIRE_EQUAL( call[0]["from"], string("0x")+txJson["from"].asString() ); + BOOST_REQUIRE_EQUAL( call.size(), 2 ); + BOOST_REQUIRE_EQUAL( call[0]["from"], string( "0x" ) + txJson["from"].asString() ); h256 h3 = fixture.client->importTransaction( tx2 ); BOOST_REQUIRE( h3 ); - BOOST_REQUIRE_EQUAL( tq->futureSize(), 3); + BOOST_REQUIRE_EQUAL( tq->futureSize(), 3 ); call = fixture.rpcClient->debug_getFutureTransactions(); - BOOST_REQUIRE_EQUAL( call.size(), 3); + BOOST_REQUIRE_EQUAL( call.size(), 3 ); h256 h4 = fixture.client->importTransaction( tx1 ); BOOST_REQUIRE( h4 ); - BOOST_REQUIRE_EQUAL( tq->futureSize(), 1); - BOOST_REQUIRE_EQUAL( tq->status().current, 3); + BOOST_REQUIRE_EQUAL( tq->futureSize(), 1 ); + BOOST_REQUIRE_EQUAL( tq->status().current, 3 ); call = fixture.rpcClient->debug_getFutureTransactions(); - BOOST_REQUIRE_EQUAL( call.size(), 1); + BOOST_REQUIRE_EQUAL( call.size(), 1 ); h256 h5 = fixture.client->importTransaction( tx4 ); BOOST_REQUIRE( h5 ); - BOOST_REQUIRE_EQUAL( tq->futureSize(), 0); - BOOST_REQUIRE_EQUAL( tq->status().current, 5); + BOOST_REQUIRE_EQUAL( tq->futureSize(), 0 ); + BOOST_REQUIRE_EQUAL( tq->status().current, 5 ); call = fixture.rpcClient->debug_getFutureTransactions(); - BOOST_REQUIRE_EQUAL( call.size(), 0); + BOOST_REQUIRE_EQUAL( call.size(), 0 ); fixture.client->skaleHost()->pauseConsensus( false ); } // TODO: Enable for multitransaction mode checking + // historic node shall ignore invalid transactions in block BOOST_AUTO_TEST_CASE( skip_invalid_transactions ) { + sleep(1); JsonRpcFixture fixture( c_genesisConfigString, true, true, false, true ); - dev::eth::simulateMining( *( fixture.client ), 1 ); // 2 Ether + dev::eth::simulateMining( *( fixture.client ), 1 ); // 2 Ether - cout << "Balance: " << fixture.rpcClient->eth_getBalance(fixture.accountHolder->allAccounts()[0].hex(), "latest") << endl; + cout << "Balance: " + << fixture.rpcClient->eth_getBalance( + fixture.accountHolder->allAccounts()[0].hex(), "latest" ) + << endl; // 1 import 1 transaction to increase block number // also send 1 eth to account2 @@ -3864,15 +4241,18 @@ BOOST_AUTO_TEST_CASE( skip_invalid_transactions ) { fixture.client->importTransaction( tx1 ); // 1 eth left (returned to author) - dev::eth::mineTransaction(*(fixture.client), 1); - cout << "Balance2: " << fixture.rpcClient->eth_getBalance(fixture.accountHolder->allAccounts()[0].hex(), "latest") << endl; + dev::eth::mineTransaction( *( fixture.client ), 1 ); + cout << "Balance2: " + << fixture.rpcClient->eth_getBalance( + fixture.accountHolder->allAccounts()[0].hex(), "latest" ) + << endl; // 2 import 4 transactions with money for 1st, 2nd, and 3rd // require full 1 Ether for gas+value txJson["gas"] = "100000"; txJson["nonce"] = "1"; - txJson["value"] = "500000000000000000";// take 0.5 eth out + txJson["value"] = "500000000000000000"; // take 0.5 eth out ts1 = toTransactionSkeleton( txJson ); ts1 = fixture.client->populateTransactionWithDefaults( ts1 ); ar1 = fixture.accountHolder->authenticate( ts1 ); @@ -3900,109 +4280,241 @@ BOOST_AUTO_TEST_CASE( skip_invalid_transactions ) { pair< bool, Secret > ar4 = fixture.accountHolder->authenticate( ts4 ); Transaction tx4( ts3, ar3.second ); - h256 h4 = fixture.client->importTransaction( tx4 ); // ok - h256 h2 = fixture.client->importTransaction( tx2 ); // invalid - h256 h3 = fixture.client->importTransaction( tx3 ); // ok - h256 h1 = fixture.client->importTransaction( tx1 ); // ok + h256 h4 = fixture.client->importTransaction( tx4 ); // ok + h256 h2 = fixture.client->importTransaction( tx2 ); // invalid + h256 h3 = fixture.client->importTransaction( tx3 ); // ok + h256 h1 = fixture.client->importTransaction( tx1 ); // ok - dev::eth::mineTransaction(*(fixture.client), 1); - cout << "Balance3: " << fixture.rpcClient->eth_getBalance(fixture.accountHolder->allAccounts()[0].hex(), "latest") << endl; + dev::eth::mineTransaction( *( fixture.client ), 1 ); + cout << "Balance3: " + << fixture.rpcClient->eth_getBalance( + fixture.accountHolder->allAccounts()[0].hex(), "latest" ) + << endl; - (void)h1; - (void)h2; - (void)h3; - (void)h4; + ( void ) h1; + ( void ) h2; + ( void ) h3; + ( void ) h4; #ifdef HISTORIC_STATE // 3 check that historic node sees only 3 txns - string explicitNumberStr = to_string(fixture.client->number()); + string explicitNumberStr = to_string( fixture.client->number() ); // 1 Block - Json::Value block = fixture.rpcClient->eth_getBlockByNumber("latest", "false"); + Json::Value block = fixture.rpcClient->eth_getBlockByNumber( "latest", "false" ); string bh = block["hash"].asString(); // 2 transaction count - Json::Value cnt = fixture.rpcClient->eth_getBlockTransactionCountByNumber("latest"); - BOOST_REQUIRE_EQUAL(cnt.asString(), "0x3"); - cnt = fixture.rpcClient->eth_getBlockTransactionCountByNumber(explicitNumberStr); - BOOST_REQUIRE_EQUAL(cnt.asString(), "0x3"); - cnt = fixture.rpcClient->eth_getBlockTransactionCountByHash(bh); - BOOST_REQUIRE_EQUAL(cnt.asString(), "0x3"); + Json::Value cnt = fixture.rpcClient->eth_getBlockTransactionCountByNumber( "latest" ); + BOOST_REQUIRE_EQUAL( cnt.asString(), "0x3" ); + cnt = fixture.rpcClient->eth_getBlockTransactionCountByNumber( explicitNumberStr ); + BOOST_REQUIRE_EQUAL( cnt.asString(), "0x3" ); + cnt = fixture.rpcClient->eth_getBlockTransactionCountByHash( bh ); + BOOST_REQUIRE_EQUAL( cnt.asString(), "0x3" ); - BOOST_REQUIRE_EQUAL(block["transactions"].size(), 3); - BOOST_REQUIRE_EQUAL(block["transactions"][0]["transactionIndex"], "0x0"); - BOOST_REQUIRE_EQUAL(block["transactions"][1]["transactionIndex"], "0x1"); - BOOST_REQUIRE_EQUAL(block["transactions"][2]["transactionIndex"], "0x2"); + BOOST_REQUIRE_EQUAL( block["transactions"].size(), 3 ); + BOOST_REQUIRE_EQUAL( block["transactions"][0]["transactionIndex"], "0x0" ); + BOOST_REQUIRE_EQUAL( block["transactions"][1]["transactionIndex"], "0x1" ); + BOOST_REQUIRE_EQUAL( block["transactions"][2]["transactionIndex"], "0x2" ); // same with explicit number - block = fixture.rpcClient->eth_getBlockByNumber(explicitNumberStr, "false"); + block = fixture.rpcClient->eth_getBlockByNumber( explicitNumberStr, "false" ); - BOOST_REQUIRE_EQUAL(block["transactions"].size(), 3); - BOOST_REQUIRE_EQUAL(block["transactions"][0]["transactionIndex"], "0x0"); - BOOST_REQUIRE_EQUAL(block["transactions"][1]["transactionIndex"], "0x1"); - BOOST_REQUIRE_EQUAL(block["transactions"][2]["transactionIndex"], "0x2"); + BOOST_REQUIRE_EQUAL( block["transactions"].size(), 3 ); + BOOST_REQUIRE_EQUAL( block["transactions"][0]["transactionIndex"], "0x0" ); + BOOST_REQUIRE_EQUAL( block["transactions"][1]["transactionIndex"], "0x1" ); + BOOST_REQUIRE_EQUAL( block["transactions"][2]["transactionIndex"], "0x2" ); // 3 receipts - Json::Value r1,r3,r4; - BOOST_REQUIRE_NO_THROW(r1 = fixture.rpcClient->eth_getTransactionReceipt(toJS(h1))); - BOOST_REQUIRE_THROW (fixture.rpcClient->eth_getTransactionReceipt(toJS(h2)), jsonrpc::JsonRpcException); - BOOST_REQUIRE_NO_THROW(r3 = fixture.rpcClient->eth_getTransactionReceipt(toJS(h3))); - BOOST_REQUIRE_NO_THROW(r4 = fixture.rpcClient->eth_getTransactionReceipt(toJS(h4))); + Json::Value r1, r3, r4; + BOOST_REQUIRE_NO_THROW( r1 = fixture.rpcClient->eth_getTransactionReceipt( toJS( h1 ) ) ); + BOOST_REQUIRE_THROW( + fixture.rpcClient->eth_getTransactionReceipt( toJS( h2 ) ), jsonrpc::JsonRpcException ); + BOOST_REQUIRE_NO_THROW( r3 = fixture.rpcClient->eth_getTransactionReceipt( toJS( h3 ) ) ); + BOOST_REQUIRE_NO_THROW( r4 = fixture.rpcClient->eth_getTransactionReceipt( toJS( h4 ) ) ); - BOOST_REQUIRE_EQUAL(r1["transactionIndex"], "0x0"); - BOOST_REQUIRE_EQUAL(r3["transactionIndex"], "0x1"); - BOOST_REQUIRE_EQUAL(r4["transactionIndex"], "0x2"); + BOOST_REQUIRE_EQUAL( r1["transactionIndex"], "0x0" ); + BOOST_REQUIRE_EQUAL( r3["transactionIndex"], "0x1" ); + BOOST_REQUIRE_EQUAL( r4["transactionIndex"], "0x2" ); // 4 transaction by index - Json::Value t0 = fixture.rpcClient->eth_getTransactionByBlockNumberAndIndex("latest", "0"); - Json::Value t1 = fixture.rpcClient->eth_getTransactionByBlockNumberAndIndex("latest", "1"); - Json::Value t2 = fixture.rpcClient->eth_getTransactionByBlockNumberAndIndex("latest", "2"); - BOOST_REQUIRE_EQUAL(jsToFixed<32>(t0["hash"].asString()), h1); - BOOST_REQUIRE_EQUAL(jsToFixed<32>(t1["hash"].asString()), h3); - BOOST_REQUIRE_EQUAL(jsToFixed<32>(t2["hash"].asString()), h4); + Json::Value t0 = fixture.rpcClient->eth_getTransactionByBlockNumberAndIndex( "latest", "0" ); + Json::Value t1 = fixture.rpcClient->eth_getTransactionByBlockNumberAndIndex( "latest", "1" ); + Json::Value t2 = fixture.rpcClient->eth_getTransactionByBlockNumberAndIndex( "latest", "2" ); + BOOST_REQUIRE_EQUAL( jsToFixed< 32 >( t0["hash"].asString() ), h1 ); + BOOST_REQUIRE_EQUAL( jsToFixed< 32 >( t1["hash"].asString() ), h3 ); + BOOST_REQUIRE_EQUAL( jsToFixed< 32 >( t2["hash"].asString() ), h4 ); // same with explicit block number - t0 = fixture.rpcClient->eth_getTransactionByBlockNumberAndIndex(explicitNumberStr, "0"); - t1 = fixture.rpcClient->eth_getTransactionByBlockNumberAndIndex(explicitNumberStr, "1"); - t2 = fixture.rpcClient->eth_getTransactionByBlockNumberAndIndex(explicitNumberStr, "2"); - BOOST_REQUIRE_EQUAL(jsToFixed<32>(t0["hash"].asString()), h1); - BOOST_REQUIRE_EQUAL(jsToFixed<32>(t1["hash"].asString()), h3); - BOOST_REQUIRE_EQUAL(jsToFixed<32>(t2["hash"].asString()), h4); + t0 = fixture.rpcClient->eth_getTransactionByBlockNumberAndIndex( explicitNumberStr, "0" ); + t1 = fixture.rpcClient->eth_getTransactionByBlockNumberAndIndex( explicitNumberStr, "1" ); + t2 = fixture.rpcClient->eth_getTransactionByBlockNumberAndIndex( explicitNumberStr, "2" ); + BOOST_REQUIRE_EQUAL( jsToFixed< 32 >( t0["hash"].asString() ), h1 ); + BOOST_REQUIRE_EQUAL( jsToFixed< 32 >( t1["hash"].asString() ), h3 ); + BOOST_REQUIRE_EQUAL( jsToFixed< 32 >( t2["hash"].asString() ), h4 ); - BOOST_REQUIRE_EQUAL(bh, r1["blockHash"].asString()); + BOOST_REQUIRE_EQUAL( bh, r1["blockHash"].asString() ); - t0 = fixture.rpcClient->eth_getTransactionByBlockHashAndIndex(bh, "0"); - t1 = fixture.rpcClient->eth_getTransactionByBlockHashAndIndex(bh, "1"); - t2 = fixture.rpcClient->eth_getTransactionByBlockHashAndIndex(bh, "2"); + t0 = fixture.rpcClient->eth_getTransactionByBlockHashAndIndex( bh, "0" ); + t1 = fixture.rpcClient->eth_getTransactionByBlockHashAndIndex( bh, "1" ); + t2 = fixture.rpcClient->eth_getTransactionByBlockHashAndIndex( bh, "2" ); - BOOST_REQUIRE_EQUAL(jsToFixed<32>(t0["hash"].asString()), h1); - BOOST_REQUIRE_EQUAL(jsToFixed<32>(t1["hash"].asString()), h3); - BOOST_REQUIRE_EQUAL(jsToFixed<32>(t2["hash"].asString()), h4); + BOOST_REQUIRE_EQUAL( jsToFixed< 32 >( t0["hash"].asString() ), h1 ); + BOOST_REQUIRE_EQUAL( jsToFixed< 32 >( t1["hash"].asString() ), h3 ); + BOOST_REQUIRE_EQUAL( jsToFixed< 32 >( t2["hash"].asString() ), h4 ); // 5 transaction by hash - BOOST_REQUIRE_THROW (fixture.rpcClient->eth_getTransactionByHash(toJS(h2)), jsonrpc::JsonRpcException); + BOOST_REQUIRE_THROW( + fixture.rpcClient->eth_getTransactionByHash( toJS( h2 ) ), jsonrpc::JsonRpcException ); // send it successfully // make money - dev::eth::simulateMining( *fixture.client, 1); + dev::eth::simulateMining( *fixture.client, 1 ); - h2 = fixture.client->importTransaction( tx2 ); // invalid + h2 = fixture.client->importTransaction( tx2 ); // invalid - dev::eth::mineTransaction(*(fixture.client), 1); + dev::eth::mineTransaction( *( fixture.client ), 1 ); // checks: Json::Value r2; - BOOST_REQUIRE_NO_THROW(r2 = fixture.rpcClient->eth_getTransactionReceipt(toJS(h2))); - BOOST_REQUIRE_EQUAL(r2["blockNumber"], toJS(fixture.client->number())); + BOOST_REQUIRE_NO_THROW( r2 = fixture.rpcClient->eth_getTransactionReceipt( toJS( h2 ) ) ); + BOOST_REQUIRE_EQUAL( r2["blockNumber"], toJS( fixture.client->number() ) ); #endif } +BOOST_AUTO_TEST_CASE( eth_signAndSendRawTransaction, + *boost::unit_test::precondition( dev::test::run_not_express ) ) { + SkaledFixture fixture( skaledConfigFileName ); + fixture.setupFirstKey(); + auto firstAccount = fixture.testAccounts.begin()->second; + auto gasPrice = fixture.getCurrentGasPrice(); + for ( uint64_t i = 0; i < 3; i++ ) { + auto dst = SkaledAccount::generate(); + fixture.splitAccountInHalves( firstAccount, dst, gasPrice, + TransactionWait::WAIT_FOR_COMPLETION); + } +} + +BOOST_AUTO_TEST_CASE( perf_sendManyParalelEthTransfers, + *boost::unit_test::precondition( dev::test::run_not_express ) ) { + SkaledFixture fixture( skaledConfigFileName ); + vector< Secret > accountPieces; + + fixture.verifyTransactions = false; + fixture.threadsCountForTestTransactions = 8; + fixture.mtmBatchSize = 1; + + fixture.setupFirstKey(); + fixture.deployERC20(); + + fixture.setupTwoToTheNKeys(12); + + fixture.sendTinyTransfersForAllAccounts( 10, TransferType::NATIVE ); + +} + +BOOST_AUTO_TEST_CASE( perf_sendManyParalelEthMTMTransfers, + *boost::unit_test::precondition( dev::test::run_not_express ) ) { + SkaledFixture fixture( skaledConfigFileName ); + vector< Secret > accountPieces; + + fixture.verifyTransactions = false; + fixture.threadsCountForTestTransactions = 8; + fixture.mtmBatchSize = 5; + + fixture.setupFirstKey(); + fixture.setupTwoToTheNKeys(8); + + fixture.sendTinyTransfersForAllAccounts( 10, TransferType::NATIVE ); + +} + + + + +BOOST_AUTO_TEST_CASE( perf_sendManyParalelEthType1Transfers, + *boost::unit_test::precondition( dev::test::run_not_express )) { + SkaledFixture fixture( skaledConfigFileName ); + vector< Secret > accountPieces; + + fixture.verifyTransactions = false; + fixture.threadsCountForTestTransactions = 8; + fixture.transactionType = TransactionType::Type1; + + fixture.setupFirstKey(); + fixture.deployERC20(); + + fixture.setupTwoToTheNKeys(12); + + fixture.sendTinyTransfersForAllAccounts( 1000, TransferType::NATIVE ); + +} + + +BOOST_AUTO_TEST_CASE( perf_sendManyParalelEthType2Transfers, + *boost::unit_test::precondition( dev::test::run_not_express )) { + SkaledFixture fixture( skaledConfigFileName ); + vector< Secret > accountPieces; + + fixture.verifyTransactions = false; + fixture.threadsCountForTestTransactions = 8; + fixture.transactionType = TransactionType::Type2; + + fixture.setupFirstKey(); + fixture.deployERC20(); + + fixture.setupTwoToTheNKeys(12); + + fixture.sendTinyTransfersForAllAccounts( 1000, TransferType::NATIVE ); + +} + + +BOOST_AUTO_TEST_CASE( perf_sendManyParalelEthPowTransfers, + *boost::unit_test::precondition( dev::test::run_not_express )) { + SkaledFixture fixture( skaledConfigFileName ); + vector< Secret > accountPieces; + + fixture.verifyTransactions = false; + fixture.threadsCountForTestTransactions = 8; + fixture.usePow = true; + + fixture.setupFirstKey(); + fixture.deployERC20(); + + fixture.setupTwoToTheNKeys(4); + + fixture.sendTinyTransfersForAllAccounts( 1000, TransferType::NATIVE ); + +} + + +BOOST_AUTO_TEST_CASE( perf_sendManyParalelERC20Transfers, + *boost::unit_test::precondition( dev::test::run_not_express )) { + SkaledFixture fixture( skaledConfigFileName ); + vector< Secret > accountPieces; + + fixture.verifyTransactions = false; + fixture.threadsCountForTestTransactions = 8; + + fixture.setupFirstKey(); + + fixture.deployERC20(); + + fixture.setupTwoToTheNKeys(12); + fixture.mintAllKeysWithERC20(); + + fixture.sendTinyTransfersForAllAccounts(10, TransferType::ERC20); + +} + + BOOST_FIXTURE_TEST_SUITE( RestrictedAddressSuite, RestrictedAddressFixture ) BOOST_AUTO_TEST_CASE( direct_call ) { @@ -4134,7 +4646,6 @@ BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE( FilestorageCacheSuite ) BOOST_AUTO_TEST_CASE( cached_filestorage ) { - auto _config = c_genesisConfigString; Json::Value ret; Json::Reader().parse( _config, ret ); @@ -4164,7 +4675,6 @@ BOOST_AUTO_TEST_CASE( cached_filestorage ) { } BOOST_AUTO_TEST_CASE( uncached_filestorage ) { - auto _config = c_genesisConfigString; Json::Value ret; Json::Reader().parse( _config, ret ); @@ -4200,64 +4710,68 @@ BOOST_FIXTURE_TEST_SUITE( GappedCacheSuite, JsonRpcFixture ) #ifdef HISTORIC_STATE BOOST_AUTO_TEST_CASE( test_blocks ) { - dev::rpc::_detail::GappedTransactionIndexCache cache(10, *client); - BOOST_REQUIRE_EQUAL(cache.realBlockTransactionCount(LatestBlock), 0); - BOOST_REQUIRE_EQUAL(cache.realBlockTransactionCount(PendingBlock), 0); - BOOST_REQUIRE_EQUAL(cache.realBlockTransactionCount(999999999), 0); + dev::rpc::_detail::GappedTransactionIndexCache cache( 10, *client ); + BOOST_REQUIRE_EQUAL( cache.realBlockTransactionCount( LatestBlock ), 0 ); + BOOST_REQUIRE_EQUAL( cache.realBlockTransactionCount( PendingBlock ), 0 ); + BOOST_REQUIRE_EQUAL( cache.realBlockTransactionCount( 999999999 ), 0 ); } BOOST_AUTO_TEST_CASE( test_transactions ) { + simulateMining( *client, 1, Address( "0xf6c2a4ba2350e58a45916a03d0faa70dcc5dcfbf" ) ); - simulateMining(*client, 1, Address("0xf6c2a4ba2350e58a45916a03d0faa70dcc5dcfbf")); + dev::rpc::_detail::GappedTransactionIndexCache cache( 10, *client ); - dev::rpc::_detail::GappedTransactionIndexCache cache(10, *client); - - Transaction invalid( - fromHex("0x0011223344556677889900112233445566778899001122334455667788990011223344556677889900112233" - "445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788" - "990011223344556677889900112233445566778899" ), + Transaction invalid( fromHex( "0x00112233445566778899001122334455667788990011223344556677889900" + "11223344556677889900112233" + "4455667788990011223344556677889900112233445566778899001122334455" + "66778899001122334455667788" + "990011223344556677889900112233445566778899" ), CheckTransaction::None, true ); Transaction valid( - fromHex( "0xf86c808504a817c80083015f90943d7112ee86223baf0a506b9d2a77595cbbba51d1872386f26fc10000801ca0655757fd0650a65a373c48a4dc0f3d6ac5c3831aa0cc2cb863a5909dc6c25f72a071882ee8633466a243c0ea64dadb3120c1ca7a5cc7433c6c0b1c861a85322265" ), + fromHex( "0xf86c808504a817c80083015f90943d7112ee86223baf0a506b9d2a77595cbbba51d1872386f26fc" + "10000801ca0655757fd0650a65a373c48a4dc0f3d6ac5c3831aa0cc2cb863a5909dc6c25f72a07188" + "2ee8633466a243c0ea64dadb3120c1ca7a5cc7433c6c0b1c861a85322265" ), CheckTransaction::None ); valid.ignoreExternalGas(); - client->importTransactionsAsBlock(Transactions{invalid, valid}, 1); + client->importTransactionsAsBlock( Transactions{ invalid, valid }, 1 ); - BOOST_REQUIRE_EQUAL(cache.realBlockTransactionCount(LatestBlock), 2); - BOOST_REQUIRE_EQUAL(cache.gappedBlockTransactionCount(LatestBlock), 1); - BOOST_REQUIRE_EQUAL(cache.realIndexFromGapped(LatestBlock, 0), 1); - BOOST_REQUIRE_EQUAL(cache.gappedIndexFromReal(LatestBlock, 1), 0); - BOOST_REQUIRE_THROW(cache.gappedIndexFromReal(LatestBlock, 0), std::out_of_range); - BOOST_REQUIRE_EQUAL(cache.transactionPresent(LatestBlock, 0), false); - BOOST_REQUIRE_EQUAL(cache.transactionPresent(LatestBlock, 1), true); + BOOST_REQUIRE_EQUAL( cache.realBlockTransactionCount( LatestBlock ), 2 ); + BOOST_REQUIRE_EQUAL( cache.gappedBlockTransactionCount( LatestBlock ), 1 ); + BOOST_REQUIRE_EQUAL( cache.realIndexFromGapped( LatestBlock, 0 ), 1 ); + BOOST_REQUIRE_EQUAL( cache.gappedIndexFromReal( LatestBlock, 1 ), 0 ); + BOOST_REQUIRE_THROW( cache.gappedIndexFromReal( LatestBlock, 0 ), std::out_of_range ); + BOOST_REQUIRE_EQUAL( cache.transactionPresent( LatestBlock, 0 ), false ); + BOOST_REQUIRE_EQUAL( cache.transactionPresent( LatestBlock, 1 ), true ); } BOOST_AUTO_TEST_CASE( test_exceptions ) { + simulateMining( *client, 1, Address( "0xf6c2a4ba2350e58a45916a03d0faa70dcc5dcfbf" ) ); - simulateMining(*client, 1, Address("0xf6c2a4ba2350e58a45916a03d0faa70dcc5dcfbf")); - - dev::rpc::_detail::GappedTransactionIndexCache cache(10, *client); + dev::rpc::_detail::GappedTransactionIndexCache cache( 10, *client ); - Transaction invalid( - fromHex("0x0011223344556677889900112233445566778899001122334455667788990011223344556677889900112233" - "445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788" - "990011223344556677889900112233445566778899" ), + Transaction invalid( fromHex( "0x00112233445566778899001122334455667788990011223344556677889900" + "11223344556677889900112233" + "4455667788990011223344556677889900112233445566778899001122334455" + "66778899001122334455667788" + "990011223344556677889900112233445566778899" ), CheckTransaction::None, true ); Transaction valid( - fromHex( "0xf86c808504a817c80083015f90943d7112ee86223baf0a506b9d2a77595cbbba51d1872386f26fc10000801ca0655757fd0650a65a373c48a4dc0f3d6ac5c3831aa0cc2cb863a5909dc6c25f72a071882ee8633466a243c0ea64dadb3120c1ca7a5cc7433c6c0b1c861a85322265" ), + fromHex( "0xf86c808504a817c80083015f90943d7112ee86223baf0a506b9d2a77595cbbba51d1872386f26fc" + "10000801ca0655757fd0650a65a373c48a4dc0f3d6ac5c3831aa0cc2cb863a5909dc6c25f72a07188" + "2ee8633466a243c0ea64dadb3120c1ca7a5cc7433c6c0b1c861a85322265" ), CheckTransaction::None ); valid.ignoreExternalGas(); - client->importTransactionsAsBlock(Transactions{invalid, valid}, 1); + client->importTransactionsAsBlock( Transactions{ invalid, valid }, 1 ); - BOOST_REQUIRE_THROW(cache.realIndexFromGapped(LatestBlock, 1), std::out_of_range); - BOOST_REQUIRE_THROW(cache.realIndexFromGapped(LatestBlock, 2), std::out_of_range); - BOOST_REQUIRE_THROW(cache.gappedIndexFromReal(LatestBlock, 2), std::out_of_range); - BOOST_REQUIRE_THROW(cache.gappedIndexFromReal(LatestBlock, 0), std::out_of_range); - BOOST_REQUIRE_THROW(cache.transactionPresent(LatestBlock, 2), std::out_of_range); + BOOST_REQUIRE_THROW( cache.realIndexFromGapped( LatestBlock, 1 ), std::out_of_range ); + BOOST_REQUIRE_THROW( cache.realIndexFromGapped( LatestBlock, 2 ), std::out_of_range ); + BOOST_REQUIRE_THROW( cache.gappedIndexFromReal( LatestBlock, 2 ), std::out_of_range ); + BOOST_REQUIRE_THROW( cache.gappedIndexFromReal( LatestBlock, 0 ), std::out_of_range ); + BOOST_REQUIRE_THROW( cache.transactionPresent( LatestBlock, 2 ), std::out_of_range ); } #endif diff --git a/test/unittests/libweb3jsonrpc/process_memory_monitor.bash b/test/unittests/libweb3jsonrpc/process_memory_monitor.bash new file mode 100755 index 000000000..a8a10af1e --- /dev/null +++ b/test/unittests/libweb3jsonrpc/process_memory_monitor.bash @@ -0,0 +1,54 @@ +#!/bin/bash + +# Set the process ID (PID) to monitor +PROCESS_PID=47822 # Replace with your process's PID + +# Check if the PID is valid +if ! ps -p $PROCESS_PID > /dev/null 2>&1; then + echo "Process with PID $PROCESS_PID not found." + exit 1 +fi + +# File to store memory usage data +DATA_FILE="rss_memory_usage.dat" +PLOT_FILE="rss_memory_plot.png" + +# Initialize the data file +echo "# Time(s) RSS(MB)" > $DATA_FILE + +# Function to get the current memory usage of the process +get_rss_memory_usage() { + # Get the RSS memory in kilobytes and convert to megabytes + ps -p $PROCESS_PID -o rss= | awk '{ printf "%.2f", $1/1024 }' +} + +# Start time in seconds +START_TIME=$(date +%s) + +# Trap to handle script interruption (e.g., Ctrl+C) +trap "echo; echo 'Plotting data...'; plot_data; exit 0" SIGINT + +# Function to plot data using gnuplot +plot_data() { + gnuplot -persist <<-EOFMarker + set terminal png size 800,600 + set output "$PLOT_FILE" + set title "RSS Memory Usage of Process PID $PROCESS_PID" + set xlabel "Time (s)" + set ylabel "RSS Memory (MB)" + set grid + plot "$DATA_FILE" using 1:2 with lines title "RSS Memory" +EOFMarker + echo "Plot saved to $PLOT_FILE" +} + +# Main loop to collect memory usage data over time +while true; do + CURRENT_TIME=$(date +%s) + ELAPSED_TIME=$((CURRENT_TIME - START_TIME)) + RSS_USAGE=$(get_rss_memory_usage) + echo "$ELAPSED_TIME $RSS_USAGE" >> $DATA_FILE + echo "Time: $ELAPSED_TIME s, RSS Memory: $RSS_USAGE MB" + sleep 1 # Collect data every second +done + diff --git a/test/unittests/libweb3jsonrpc/run_skaled.py b/test/unittests/libweb3jsonrpc/run_skaled.py new file mode 100644 index 000000000..2ee93309a --- /dev/null +++ b/test/unittests/libweb3jsonrpc/run_skaled.py @@ -0,0 +1,52 @@ +import subprocess +import sys +import shutil +from pathlib import Path + +import time + +# Set these +TOTAL_NODES: int = 16 +BUILD_DIR: str = "cmake-build-debug" +skaled_executable: str = "../../../" + BUILD_DIR + '/skaled/skaled' + +processes = [] + + +def run_skaled(_schain_index: int, _total_nodes: int): + try: + print("Starting skaled...") + skaled_dir : str = f"/tmp/skaled_{_schain_index}_of_{_total_nodes}" + skaled_path = Path(skaled_dir) + + + # Create directory if it doesn't exist + if not skaled_path.exists(): + skaled_path.mkdir(parents=True, exist_ok=True) + print("Directory created successfully.") + + shutil.copy2(skaled_executable, skaled_dir + "/skaled") + + + configFile: str = f"../../historicstate/configs/test_{_schain_index}_of_{_total_nodes}.json" + process = subprocess.Popen([skaled_dir + "/skaled", + '--config', configFile], stdout=sys.stdout, stderr=sys.stderr) + processes.append(process) + + except Exception as e: + print(f"Exception occurred: {e}") + finally: + print("skaled crashed or terminated.") + + + +def main(): + for i in range(TOTAL_NODES): + run_skaled(i + 1, TOTAL_NODES) + + for i in range(TOTAL_NODES): + processes[i].wait() + + +if __name__ == "__main__": + main()