; LLVM IR from dynexcoin/Dynex :: src/Transfers (BlockchainSynchronizer)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.Logging::LoggerMessage" = type <{ %"class.std::basic_ostream.base", %"class.std::basic_streambuf", ptr, %"class.std::__cxx11::basic_string", i32, [4 x i8], %"class.std::__cxx11::basic_string", %"class.boost::posix_time::ptime", i8, [7 x i8], %"class.std::basic_ios" }>
%"class.std::basic_ostream.base" = type { ptr }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%"class.boost::posix_time::ptime" = type { %"class.boost::date_time::base_time" }
%"class.boost::date_time::base_time" = type { %"struct.boost::date_time::counted_time_rep" }
%"struct.boost::date_time::counted_time_rep" = type { %"class.boost::date_time::int_adapter" }
%"class.boost::date_time::int_adapter" = type { i64 }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"struct.DynexCN::BlockchainInterval" = type { i32, %"class.std::vector.23" }
%"class.std::vector.23" = type { %"struct.std::_Vector_base.24" }
%"struct.std::_Vector_base.24" = type { %"struct.std::_Vector_base<Crypto::Hash, std::allocator<Crypto::Hash>>::_Vector_impl" }
%"struct.std::_Vector_base<Crypto::Hash, std::allocator<Crypto::Hash>>::_Vector_impl" = type { %"struct.std::_Vector_base<Crypto::Hash, std::allocator<Crypto::Hash>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Crypto::Hash, std::allocator<Crypto::Hash>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.73" = type { %"struct.std::_Vector_base.74" }
%"struct.std::_Vector_base.74" = type { %"struct.std::_Vector_base<DynexCN::CompleteBlock, std::allocator<DynexCN::CompleteBlock>>::_Vector_impl" }
%"struct.std::_Vector_base<DynexCN::CompleteBlock, std::allocator<DynexCN::CompleteBlock>>::_Vector_impl" = type { %"struct.std::_Vector_base<DynexCN::CompleteBlock, std::allocator<DynexCN::CompleteBlock>>::_Vector_impl_data" }
%"struct.std::_Vector_base<DynexCN::CompleteBlock, std::allocator<DynexCN::CompleteBlock>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"struct.DynexCN::CompleteBlock" = type { %"struct.Crypto::Hash", %"class.boost::optional", %"class.std::__cxx11::list.103" }
%"struct.Crypto::Hash" = type { [32 x i8] }
%"class.boost::optional" = type { %"class.boost::optional_detail::optional_base" }
%"class.boost::optional_detail::optional_base" = type { i8, [7 x i8], %"class.boost::optional_detail::aligned_storage" }
%"class.boost::optional_detail::aligned_storage" = type { %"union.boost::optional_detail::aligned_storage<DynexCN::Block>::dummy_u" }
%"union.boost::optional_detail::aligned_storage<DynexCN::Block>::dummy_u" = type { [384 x i8] }
%"class.std::__cxx11::list.103" = type { %"class.std::__cxx11::_List_base.104" }
%"class.std::__cxx11::_List_base.104" = type { %"struct.std::__cxx11::_List_base<std::shared_ptr<DynexCN::ITransactionReader>, std::allocator<std::shared_ptr<DynexCN::ITransactionReader>>>::_List_impl" }
%"struct.std::__cxx11::_List_base<std::shared_ptr<DynexCN::ITransactionReader>, std::allocator<std::shared_ptr<DynexCN::ITransactionReader>>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { ptr, ptr }
%"class.std::shared_ptr.108" = type { %"class.std::__shared_ptr.109" }
%"class.std::__shared_ptr.109" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::unique_ptr.111" = type { %"struct.std::__uniq_ptr_data.112" }
%"struct.std::__uniq_ptr_data.112" = type { %"class.std::__uniq_ptr_impl.113" }
%"class.std::__uniq_ptr_impl.113" = type { %"class.std::tuple.114" }
%"class.std::tuple.114" = type { %"struct.std::_Tuple_impl.115" }
%"struct.std::_Tuple_impl.115" = type { %"struct.std::_Head_base.118" }
%"struct.std::_Head_base.118" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.119" = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.120 = type { ptr }
%"class.std::error_code" = type { i32, ptr }
%"class.std::unique_lock" = type <{ ptr, i8, [7 x i8] }>
%class.anon.121 = type { ptr }
%"class.std::chrono::duration" = type { i64 }
%"class.DynexCN::BlockchainSynchronizer" = type { %"class.DynexCN::IObservableImpl", %"class.DynexCN::INodeObserver", %"class.Logging::LoggerRef", %"class.std::map", ptr, %"struct.Crypto::Hash", %"struct.Crypto::Hash", i32, i32, %"class.std::unique_ptr", %"class.std::__cxx11::list", %"class.std::__cxx11::list.15", %"class.std::mutex", %"class.std::mutex", %"class.std::condition_variable" }
%"class.DynexCN::IObservableImpl" = type { %"class.DynexCN::IBlockchainSynchronizer", %"class.Tools::ObserverManager" }
%"class.DynexCN::IBlockchainSynchronizer" = type { %"class.DynexCN::IObservable", %"class.DynexCN::IStreamSerializable" }
%"class.DynexCN::IObservable" = type { ptr }
%"class.DynexCN::IStreamSerializable" = type { ptr }
%"class.Tools::ObserverManager" = type { %"class.std::vector", %"class.std::mutex" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<DynexCN::IBlockchainSynchronizerObserver *, std::allocator<DynexCN::IBlockchainSynchronizerObserver *>>::_Vector_impl" }
%"struct.std::_Vector_base<DynexCN::IBlockchainSynchronizerObserver *, std::allocator<DynexCN::IBlockchainSynchronizerObserver *>>::_Vector_impl" = type { %"struct.std::_Vector_base<DynexCN::IBlockchainSynchronizerObserver *, std::allocator<DynexCN::IBlockchainSynchronizerObserver *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<DynexCN::IBlockchainSynchronizerObserver *, std::allocator<DynexCN::IBlockchainSynchronizerObserver *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.DynexCN::INodeObserver" = type { ptr }
%"class.Logging::LoggerRef" = type { ptr, %"class.std::__cxx11::basic_string" }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<DynexCN::IBlockchainConsumer *, std::pair<DynexCN::IBlockchainConsumer *const, std::shared_ptr<DynexCN::SynchronizationState>>, std::_Select1st<std::pair<DynexCN::IBlockchainConsumer *const, std::shared_ptr<DynexCN::SynchronizationState>>>, std::less<DynexCN::IBlockchainConsumer *>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<DynexCN::IBlockchainConsumer *, std::pair<DynexCN::IBlockchainConsumer *const, std::shared_ptr<DynexCN::SynchronizationState>>, std::_Select1st<std::pair<DynexCN::IBlockchainConsumer *const, std::shared_ptr<DynexCN::SynchronizationState>>>, std::less<DynexCN::IBlockchainConsumer *>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.11" }
%"struct.std::_Head_base.11" = type { ptr }
%"class.std::__cxx11::list" = type { %"class.std::__cxx11::_List_base" }
%"class.std::__cxx11::_List_base" = type { %"struct.std::__cxx11::_List_base<std::pair<const DynexCN::ITransactionReader *, std::promise<std::error_code>>, std::allocator<std::pair<const DynexCN::ITransactionReader *, std::promise<std::error_code>>>>::_List_impl" }
%"struct.std::__cxx11::_List_base<std::pair<const DynexCN::ITransactionReader *, std::promise<std::error_code>>, std::allocator<std::pair<const DynexCN::ITransactionReader *, std::promise<std::error_code>>>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"class.std::__cxx11::list.15" = type { %"class.std::__cxx11::_List_base.16" }
%"class.std::__cxx11::_List_base.16" = type { %"struct.std::__cxx11::_List_base<std::pair<const Crypto::Hash *, std::promise<void>>, std::allocator<std::pair<const Crypto::Hash *, std::promise<void>>>>::_List_impl" }
%"struct.std::__cxx11::_List_base<std::pair<const Crypto::Hash *, std::promise<void>>, std::allocator<std::pair<const Crypto::Hash *, std::promise<void>>>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"class.std::mutex" = type { %"class.std::__mutex_base" }
%"class.std::__mutex_base" = type { %union.pthread_mutex_t }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::condition_variable" = type { %"class.std::__condvar" }
%"class.std::__condvar" = type { %union.pthread_cond_t }
%union.pthread_cond_t = type { %struct.__pthread_cond_s }
%struct.__pthread_cond_s = type { %union.__atomic_wide_counter, %union.__atomic_wide_counter, [2 x i32], [2 x i32], i32, i32, [2 x i32] }
%union.__atomic_wide_counter = type { i64 }
%"struct.DynexCN::BlockchainSynchronizer::GetBlocksResponse" = type { i32, %"class.std::vector.63" }
%"class.std::vector.63" = type { %"struct.std::_Vector_base.64" }
%"struct.std::_Vector_base.64" = type { %"struct.std::_Vector_base<DynexCN::BlockShortEntry, std::allocator<DynexCN::BlockShortEntry>>::_Vector_impl" }
%"struct.std::_Vector_base<DynexCN::BlockShortEntry, std::allocator<DynexCN::BlockShortEntry>>::_Vector_impl" = type { %"struct.std::_Vector_base<DynexCN::BlockShortEntry, std::allocator<DynexCN::BlockShortEntry>>::_Vector_impl_data" }
%"struct.std::_Vector_base<DynexCN::BlockShortEntry, std::allocator<DynexCN::BlockShortEntry>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.DynexCN::BlockShortEntry" = type { %"struct.Crypto::Hash", i8, %"struct.DynexCN::Block", %"class.std::vector.98" }
%"struct.DynexCN::Block" = type { %"struct.DynexCN::BlockHeader", %"struct.DynexCN::ParentBlock", %"struct.DynexCN::Transaction", %"class.std::vector.23" }
%"struct.DynexCN::BlockHeader" = type { i8, i8, i32, i64, %"struct.Crypto::Hash" }
%"struct.DynexCN::ParentBlock" = type { i8, i8, %"struct.Crypto::Hash", i16, %"class.std::vector.23", %"struct.DynexCN::Transaction", %"class.std::vector.23" }
%"struct.DynexCN::Transaction" = type { %"struct.DynexCN::TransactionPrefix", %"class.std::vector.93" }
%"struct.DynexCN::TransactionPrefix" = type { i8, i64, %"class.std::vector.78", %"class.std::vector.83", %"class.std::vector.88" }
%"class.std::vector.78" = type { %"struct.std::_Vector_base.79" }
%"struct.std::_Vector_base.79" = type { %"struct.std::_Vector_base<boost::variant<DynexCN::BaseInput, DynexCN::KeyInput, DynexCN::MultisignatureInput>, std::allocator<boost::variant<DynexCN::BaseInput, DynexCN::KeyInput, DynexCN::MultisignatureInput>>>::_Vector_impl" }
%"struct.std::_Vector_base<boost::variant<DynexCN::BaseInput, DynexCN::KeyInput, DynexCN::MultisignatureInput>, std::allocator<boost::variant<DynexCN::BaseInput, DynexCN::KeyInput, DynexCN::MultisignatureInput>>>::_Vector_impl" = type { %"struct.std::_Vector_base<boost::variant<DynexCN::BaseInput, DynexCN::KeyInput, DynexCN::MultisignatureInput>, std::allocator<boost::variant<DynexCN::BaseInput, DynexCN::KeyInput, DynexCN::MultisignatureInput>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<boost::variant<DynexCN::BaseInput, DynexCN::KeyInput, DynexCN::MultisignatureInput>, std::allocator<boost::variant<DynexCN::BaseInput, DynexCN::KeyInput, DynexCN::MultisignatureInput>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.83" = type { %"struct.std::_Vector_base.84" }
%"struct.std::_Vector_base.84" = type { %"struct.std::_Vector_base<DynexCN::TransactionOutput, std::allocator<DynexCN::TransactionOutput>>::_Vector_impl" }
%"struct.std::_Vector_base<DynexCN::TransactionOutput, std::allocator<DynexCN::TransactionOutput>>::_Vector_impl" = type { %"struct.std::_Vector_base<DynexCN::TransactionOutput, std::allocator<DynexCN::TransactionOutput>>::_Vector_impl_data" }
%"struct.std::_Vector_base<DynexCN::TransactionOutput, std::allocator<DynexCN::TransactionOutput>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.88" = type { %"struct.std::_Vector_base.89" }
%"struct.std::_Vector_base.89" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.93" = type { %"struct.std::_Vector_base.94" }
%"struct.std::_Vector_base.94" = type { %"struct.std::_Vector_base<std::vector<Crypto::Signature>, std::allocator<std::vector<Crypto::Signature>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<Crypto::Signature>, std::allocator<std::vector<Crypto::Signature>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<Crypto::Signature>, std::allocator<std::vector<Crypto::Signature>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<Crypto::Signature>, std::allocator<std::vector<Crypto::Signature>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.98" = type { %"struct.std::_Vector_base.99" }
%"struct.std::_Vector_base.99" = type { %"struct.std::_Vector_base<DynexCN::TransactionShortInfo, std::allocator<DynexCN::TransactionShortInfo>>::_Vector_impl" }
%"struct.std::_Vector_base<DynexCN::TransactionShortInfo, std::allocator<DynexCN::TransactionShortInfo>>::_Vector_impl" = type { %"struct.std::_Vector_base<DynexCN::TransactionShortInfo, std::allocator<DynexCN::TransactionShortInfo>>::_Vector_impl_data" }
%"struct.std::_Vector_base<DynexCN::TransactionShortInfo, std::allocator<DynexCN::TransactionShortInfo>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.DynexCN::TransactionShortInfo" = type { %"struct.Crypto::Hash", %"struct.DynexCN::TransactionPrefix" }

@_ZN7Logging10BRIGHT_REDB5cxx11E = external global %"class.std::__cxx11::basic_string", align 8
@.str.13 = external hidden unnamed_addr constant [9 x i8], align 1
@_ZN7Logging7DEFAULTB5cxx11E = external global %"class.std::__cxx11::basic_string", align 8
@_ZTISt9exception = external constant ptr
@.str.57 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZN7Logging13BRIGHT_YELLOWB5cxx11E = external global %"class.std::__cxx11::basic_string", align 8
@.str.61 = external hidden unnamed_addr constant [32 x i8], align 1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

declare i32 @__gxx_personality_v0(...)

; Function Attrs: noinline noreturn nounwind uwtable
declare hidden void @__clang_call_terminate(ptr noundef) #2

declare ptr @__cxa_begin_catch(ptr)

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK7DynexCN22BlockchainSynchronizer17checkIfShouldStopEv(ptr noundef nonnull align 8 dereferenceable(440)) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEPKcEOT_S5_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 8 dereferenceable(8)) #4

declare void @_ZNK7Logging9LoggerRefclENS_5LevelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.Logging::LoggerMessage") align 8, ptr noundef nonnull align 8 dereferenceable(40), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) #5

; Function Attrs: nounwind
declare void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161)) unnamed_addr #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEmEOT_S3_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 8 dereferenceable(8)) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA9_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 1 dereferenceable(9)) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt11unique_lockISt5mutexEC2ERS0_(ptr noundef nonnull align 8 dereferenceable(9), ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt11unique_lockISt5mutexED2Ev(ptr noundef nonnull align 8 dereferenceable(9)) unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEN6Crypto4HashEEOT_S5_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 1 dereferenceable(32)) #4

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN7DynexCN22BlockchainSynchronizer14setFutureStateENS0_5StateE(ptr noundef nonnull align 8 dereferenceable(440), i32 noundef) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN7DynexCN22BlockchainSynchronizer16setFutureStateIfENS0_5StateEOSt8functionIFbvEE(ptr noundef nonnull align 8 dereferenceable(440), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) #3 align 2

declare void @__cxa_end_catch()

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt11unique_lockISt5mutexE6unlockEv(ptr noundef nonnull align 8 dereferenceable(9)) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEjEOT_S3_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 4 dereferenceable(4)) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA17_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 1 dereferenceable(17)) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN5Tools15ObserverManagerIN7DynexCN31IBlockchainSynchronizerObserverEE6notifyIMS2_FvSt10error_codeEJS5_EEEvT_DpT0_(ptr noundef nonnull align 8 dereferenceable(64), i64, i64, i32, ptr) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #7 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7DynexCN22BlockchainSynchronizer13processBlocksERNS0_17GetBlocksResponseE(ptr noundef nonnull align 8 dereferenceable(440) %0, ptr noundef nonnull align 8 dereferenceable(32) %1) #3 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"class.Logging::LoggerMessage", align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i64, align 8
  %9 = alloca %"struct.DynexCN::BlockchainInterval", align 8
  %10 = alloca %"class.std::vector.73", align 8
  %11 = alloca ptr, align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca %"struct.DynexCN::CompleteBlock", align 8
  %17 = alloca %"class.std::shared_ptr.108", align 8
  %18 = alloca %"class.std::unique_ptr.111", align 8
  %19 = alloca ptr, align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator.119", align 8
  %21 = alloca %"class.__gnu_cxx::__normal_iterator.119", align 8
  %22 = alloca ptr, align 8
  %23 = alloca %"class.std::shared_ptr.108", align 8
  %24 = alloca %"class.std::unique_ptr.111", align 8
  %25 = alloca ptr, align 8
  %26 = alloca %"class.Logging::LoggerMessage", align 8
  %27 = alloca ptr, align 8
  %28 = alloca %"class.std::function", align 8
  %29 = alloca %class.anon.120, align 8
  %30 = alloca %"class.std::error_code", align 8
  %31 = alloca { i64, i64 }, align 8
  %32 = alloca i32, align 4
  %33 = alloca %"class.std::unique_lock", align 8
  %34 = alloca i32, align 4
  %35 = alloca %"class.std::function", align 8
  %36 = alloca %class.anon.121, align 8
  %37 = alloca %"class.std::error_code", align 8
  %38 = alloca { i64, i64 }, align 8
  %39 = alloca %"class.Logging::LoggerMessage", align 8
  %40 = alloca %"class.std::chrono::duration", align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca { i64, i64 }, align 8
  %45 = alloca %"class.Logging::LoggerMessage", align 8
  %46 = alloca %"class.Logging::LoggerMessage", align 8
  %47 = alloca %"class.std::error_code", align 8
  %48 = alloca { i64, i64 }, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %49 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 432, ptr %5) #10
  %50 = getelementptr inbounds %"class.DynexCN::BlockchainSynchronizer", ptr %49, i32 0, i32 2
  call void @_ZNK7Logging9LoggerRefclENS_5LevelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.Logging::LoggerMessage") align 8 %5, ptr noundef nonnull align 8 dereferenceable(40) %50, i32 noundef 4, ptr noundef nonnull align 8 dereferenceable(32) @_ZN7Logging7DEFAULTB5cxx11E)
  %51 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA29_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %5, ptr noundef nonnull align 1 dereferenceable(29) @.str.57)
          to label %52 unwind label %79

52:                                               ; preds = %2
  %53 = load ptr, ptr %4, align 8, !tbaa !5
  %54 = getelementptr inbounds %"struct.DynexCN::BlockchainSynchronizer::GetBlocksResponse", ptr %53, i32 0, i32 0
  %55 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEjEOT_S3_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %51, ptr noundef nonnull align 4 dereferenceable(4) %54)
          to label %56 unwind label %79

56:                                               ; preds = %52
  %57 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA9_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %55, ptr noundef nonnull align 1 dereferenceable(9) @.str.13)
          to label %58 unwind label %79

58:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #10
  %59 = load ptr, ptr %4, align 8, !tbaa !5
  %60 = getelementptr inbounds %"struct.DynexCN::BlockchainSynchronizer::GetBlocksResponse", ptr %59, i32 0, i32 1
  %61 = call noundef i64 @_ZNKSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %60) #10
  store i64 %61, ptr %8, align 8, !tbaa !9
  %62 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEmEOT_S3_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %57, ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %63 unwind label %83

63:                                               ; preds = %58
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #10
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %5) #10
  call void @llvm.lifetime.end.p0(i64 432, ptr %5) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %9) #10
  call void @_ZN7DynexCN18BlockchainIntervalC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #10
  %64 = load ptr, ptr %4, align 8, !tbaa !5
  %65 = getelementptr inbounds %"struct.DynexCN::BlockchainSynchronizer::GetBlocksResponse", ptr %64, i32 0, i32 0
  %66 = load i32, ptr %65, align 8, !tbaa !11
  %67 = getelementptr inbounds %"struct.DynexCN::BlockchainInterval", ptr %9, i32 0, i32 0
  store i32 %66, ptr %67, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #10
  call void @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #10
  %68 = load ptr, ptr %4, align 8, !tbaa !5
  %69 = getelementptr inbounds %"struct.DynexCN::BlockchainSynchronizer::GetBlocksResponse", ptr %68, i32 0, i32 1
  store ptr %69, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #10
  %70 = load ptr, ptr %11, align 8, !tbaa !5
  %71 = call ptr @_ZNSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %70) #10
  %72 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %12, i32 0, i32 0
  store ptr %71, ptr %72, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #10
  %73 = load ptr, ptr %11, align 8, !tbaa !5
  %74 = call ptr @_ZNSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %73) #10
  %75 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %13, i32 0, i32 0
  store ptr %74, ptr %75, align 8
  br label %76

76:                                               ; preds = %253, %63
  %77 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN7DynexCN15BlockShortEntryESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #10
  br i1 %77, label %88, label %78

78:                                               ; preds = %76
  store i32 2, ptr %14, align 4
  br label %257

79:                                               ; preds = %56, %52, %2
  %80 = landingpad { ptr, i32 }
          cleanup
  %81 = extractvalue { ptr, i32 } %80, 0
  store ptr %81, ptr %6, align 8
  %82 = extractvalue { ptr, i32 } %80, 1
  store i32 %82, ptr %7, align 4
  br label %87

83:                                               ; preds = %58
  %84 = landingpad { ptr, i32 }
          cleanup
  %85 = extractvalue { ptr, i32 } %84, 0
  store ptr %85, ptr %6, align 8
  %86 = extractvalue { ptr, i32 } %84, 1
  store i32 %86, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #10
  br label %87

87:                                               ; preds = %83, %79
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %5) #10
  call void @llvm.lifetime.end.p0(i64 432, ptr %5) #10
  br label %453

88:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #10
  %89 = call noundef nonnull align 8 dereferenceable(448) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN7DynexCN15BlockShortEntryESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #10
  store ptr %89, ptr %15, align 8, !tbaa !5
  %90 = invoke noundef zeroext i1 @_ZNK7DynexCN22BlockchainSynchronizer17checkIfShouldStopEv(ptr noundef nonnull align 8 dereferenceable(440) %49)
          to label %91 unwind label %93

91:                                               ; preds = %88
  br i1 %90, label %92, label %97

92:                                               ; preds = %91
  store i32 2, ptr %14, align 4
  br label %250

93:                                               ; preds = %88
  %94 = landingpad { ptr, i32 }
          cleanup
  %95 = extractvalue { ptr, i32 } %94, 0
  store ptr %95, ptr %6, align 8
  %96 = extractvalue { ptr, i32 } %94, 1
  store i32 %96, ptr %7, align 4
  br label %256

97:                                               ; preds = %91
  call void @llvm.lifetime.start.p0(i64 448, ptr %16) #10
  call void @_ZN7DynexCN13CompleteBlockC2Ev(ptr noundef nonnull align 8 dereferenceable(448) %16) #10
  %98 = load ptr, ptr %15, align 8, !tbaa !5
  %99 = getelementptr inbounds %"struct.DynexCN::BlockShortEntry", ptr %98, i32 0, i32 0
  %100 = getelementptr inbounds %"struct.DynexCN::CompleteBlock", ptr %16, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %100, ptr align 8 %99, i64 32, i1 false), !tbaa.struct !24
  %101 = getelementptr inbounds %"struct.DynexCN::BlockchainInterval", ptr %9, i32 0, i32 1
  %102 = getelementptr inbounds %"struct.DynexCN::CompleteBlock", ptr %16, i32 0, i32 0
  invoke void @_ZNSt6vectorIN6Crypto4HashESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %101, ptr noundef nonnull align 1 dereferenceable(32) %102)
          to label %103 unwind label %133

103:                                              ; preds = %97
  %104 = load ptr, ptr %15, align 8, !tbaa !5
  %105 = getelementptr inbounds %"struct.DynexCN::BlockShortEntry", ptr %104, i32 0, i32 1
  %106 = load i8, ptr %105, align 8, !tbaa !26, !range !56, !noundef !57
  %107 = trunc i8 %106 to i1
  br i1 %107, label %108, label %245

108:                                              ; preds = %103
  %109 = load ptr, ptr %15, align 8, !tbaa !5
  %110 = getelementptr inbounds %"struct.DynexCN::BlockShortEntry", ptr %109, i32 0, i32 2
  %111 = getelementptr inbounds %"struct.DynexCN::CompleteBlock", ptr %16, i32 0, i32 1
  %112 = invoke noundef nonnull align 8 dereferenceable(392) ptr @_ZN5boost8optionalIN7DynexCN5BlockEEaSIS2_EENS_9enable_ifINS_7is_sameIS2_NS_5decayIT_E4typeEEERS3_E4typeEOS8_(ptr noundef nonnull align 8 dereferenceable(392) %111, ptr noundef nonnull align 8 dereferenceable(384) %110)
          to label %113 unwind label %133

113:                                              ; preds = %108
  %114 = getelementptr inbounds %"struct.DynexCN::CompleteBlock", ptr %16, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #10
  %115 = getelementptr inbounds %"struct.DynexCN::CompleteBlock", ptr %16, i32 0, i32 1
  %116 = invoke noundef ptr @_ZN5boost8optionalIN7DynexCN5BlockEEptEv(ptr noundef nonnull align 8 dereferenceable(392) %115)
          to label %117 unwind label %137

117:                                              ; preds = %113
  %118 = getelementptr inbounds %"struct.DynexCN::Block", ptr %116, i32 0, i32 2
  invoke void @_ZN7DynexCN23createTransactionPrefixERKNS_11TransactionE(ptr dead_on_unwind writable sret(%"class.std::unique_ptr.111") align 8 %18, ptr noundef nonnull align 8 dereferenceable(112) %118)
          to label %119 unwind label %137

119:                                              ; preds = %117
  invoke void @_ZNSt10shared_ptrIN7DynexCN18ITransactionReaderEEC2IS1_St14default_deleteIS1_EvEEOSt10unique_ptrIT_T0_E(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef nonnull align 8 dereferenceable(8) %18)
          to label %120 unwind label %141

120:                                              ; preds = %119
  invoke void @_ZNSt7__cxx114listISt10shared_ptrIN7DynexCN18ITransactionReaderEESaIS4_EE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %114, ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %121 unwind label %145

121:                                              ; preds = %120
  call void @_ZNSt12__shared_ptrIN7DynexCN18ITransactionReaderELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #10
  call void @_ZNSt10unique_ptrIN7DynexCN18ITransactionReaderESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #10
  %122 = load ptr, ptr %15, align 8, !tbaa !5
  %123 = getelementptr inbounds %"struct.DynexCN::BlockShortEntry", ptr %122, i32 0, i32 3
  store ptr %123, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #10
  %124 = load ptr, ptr %19, align 8, !tbaa !5
  %125 = call ptr @_ZNSt6vectorIN7DynexCN20TransactionShortInfoESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %124) #10
  %126 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.119", ptr %20, i32 0, i32 0
  store ptr %125, ptr %126, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #10
  %127 = load ptr, ptr %19, align 8, !tbaa !5
  %128 = call ptr @_ZNSt6vectorIN7DynexCN20TransactionShortInfoESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %127) #10
  %129 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.119", ptr %21, i32 0, i32 0
  store ptr %128, ptr %129, align 8
  br label %130

130:                                              ; preds = %161, %121
  %131 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN7DynexCN20TransactionShortInfoESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  br i1 %131, label %151, label %132

132:                                              ; preds = %130
  store i32 4, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #10
  br label %213

133:                                              ; preds = %245, %108, %97
  %134 = landingpad { ptr, i32 }
          cleanup
  %135 = extractvalue { ptr, i32 } %134, 0
  store ptr %135, ptr %6, align 8
  %136 = extractvalue { ptr, i32 } %134, 1
  store i32 %136, ptr %7, align 4
  br label %255

137:                                              ; preds = %117, %113
  %138 = landingpad { ptr, i32 }
          cleanup
  %139 = extractvalue { ptr, i32 } %138, 0
  store ptr %139, ptr %6, align 8
  %140 = extractvalue { ptr, i32 } %138, 1
  store i32 %140, ptr %7, align 4
  br label %150

141:                                              ; preds = %119
  %142 = landingpad { ptr, i32 }
          cleanup
  %143 = extractvalue { ptr, i32 } %142, 0
  store ptr %143, ptr %6, align 8
  %144 = extractvalue { ptr, i32 } %142, 1
  store i32 %144, ptr %7, align 4
  br label %149

145:                                              ; preds = %120
  %146 = landingpad { ptr, i32 }
          cleanup
  %147 = extractvalue { ptr, i32 } %146, 0
  store ptr %147, ptr %6, align 8
  %148 = extractvalue { ptr, i32 } %146, 1
  store i32 %148, ptr %7, align 4
  call void @_ZNSt12__shared_ptrIN7DynexCN18ITransactionReaderELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #10
  br label %149

149:                                              ; preds = %145, %141
  call void @_ZNSt10unique_ptrIN7DynexCN18ITransactionReaderESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #10
  br label %150

150:                                              ; preds = %149, %137
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #10
  br label %255

151:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #10
  %152 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN7DynexCN20TransactionShortInfoESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  store ptr %152, ptr %22, align 8, !tbaa !5
  %153 = getelementptr inbounds %"struct.DynexCN::CompleteBlock", ptr %16, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #10
  %154 = load ptr, ptr %22, align 8, !tbaa !5
  %155 = getelementptr inbounds %"struct.DynexCN::TransactionShortInfo", ptr %154, i32 0, i32 1
  %156 = load ptr, ptr %22, align 8, !tbaa !5
  %157 = getelementptr inbounds %"struct.DynexCN::TransactionShortInfo", ptr %156, i32 0, i32 0
  invoke void @_ZN7DynexCN23createTransactionPrefixERKNS_17TransactionPrefixERKN6Crypto4HashE(ptr dead_on_unwind writable sret(%"class.std::unique_ptr.111") align 8 %24, ptr noundef nonnull align 8 dereferenceable(88) %155, ptr noundef nonnull align 1 dereferenceable(32) %157)
          to label %158 unwind label %163

158:                                              ; preds = %151
  invoke void @_ZNSt10shared_ptrIN7DynexCN18ITransactionReaderEEC2IS1_St14default_deleteIS1_EvEEOSt10unique_ptrIT_T0_E(ptr noundef nonnull align 8 dereferenceable(16) %23, ptr noundef nonnull align 8 dereferenceable(8) %24)
          to label %159 unwind label %167

159:                                              ; preds = %158
  invoke void @_ZNSt7__cxx114listISt10shared_ptrIN7DynexCN18ITransactionReaderEESaIS4_EE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %153, ptr noundef nonnull align 8 dereferenceable(16) %23)
          to label %160 unwind label %171

160:                                              ; preds = %159
  call void @_ZNSt12__shared_ptrIN7DynexCN18ITransactionReaderELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #10
  call void @_ZNSt10unique_ptrIN7DynexCN18ITransactionReaderESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  br label %161

161:                                              ; preds = %160
  %162 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN7DynexCN20TransactionShortInfoESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  br label %130

163:                                              ; preds = %151
  %164 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %6, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %7, align 4
  br label %176

167:                                              ; preds = %158
  %168 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %169 = extractvalue { ptr, i32 } %168, 0
  store ptr %169, ptr %6, align 8
  %170 = extractvalue { ptr, i32 } %168, 1
  store i32 %170, ptr %7, align 4
  br label %175

171:                                              ; preds = %159
  %172 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %173 = extractvalue { ptr, i32 } %172, 0
  store ptr %173, ptr %6, align 8
  %174 = extractvalue { ptr, i32 } %172, 1
  store i32 %174, ptr %7, align 4
  call void @_ZNSt12__shared_ptrIN7DynexCN18ITransactionReaderELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #10
  br label %175

175:                                              ; preds = %171, %167
  call void @_ZNSt10unique_ptrIN7DynexCN18ITransactionReaderESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #10
  br label %176

176:                                              ; preds = %175, %163
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #10
  br label %177

177:                                              ; preds = %176
  %178 = load i32, ptr %7, align 4
  %179 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTISt9exception) #10
  %180 = icmp eq i32 %178, %179
  br i1 %180, label %181, label %255

181:                                              ; preds = %177
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #10
  %182 = load ptr, ptr %6, align 8
  %183 = call ptr @__cxa_begin_catch(ptr %182) #10
  store ptr %183, ptr %25, align 8
  call void @llvm.lifetime.start.p0(i64 432, ptr %26) #10
  %184 = getelementptr inbounds %"class.DynexCN::BlockchainSynchronizer", ptr %49, i32 0, i32 2
  invoke void @_ZNK7Logging9LoggerRefclENS_5LevelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.Logging::LoggerMessage") align 8 %26, ptr noundef nonnull align 8 dereferenceable(40) %184, i32 noundef 1, ptr noundef nonnull align 8 dereferenceable(32) @_ZN7Logging10BRIGHT_REDB5cxx11E)
          to label %185 unwind label %214

185:                                              ; preds = %181
  %186 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA27_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %26, ptr noundef nonnull align 1 dereferenceable(27) @.str.58)
          to label %187 unwind label %218

187:                                              ; preds = %185
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #10
  %188 = load ptr, ptr %25, align 8, !tbaa !5
  %189 = load ptr, ptr %188, align 8, !tbaa !58
  %190 = getelementptr inbounds ptr, ptr %189, i64 2
  %191 = load ptr, ptr %190, align 8
  %192 = call noundef ptr %191(ptr noundef nonnull align 8 dereferenceable(8) %188) #10
  store ptr %192, ptr %27, align 8, !tbaa !5
  %193 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEPKcEOT_S5_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %186, ptr noundef nonnull align 8 dereferenceable(8) %27)
          to label %194 unwind label %222

194:                                              ; preds = %187
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #10
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %26) #10
  call void @llvm.lifetime.end.p0(i64 432, ptr %26) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #10
  %195 = getelementptr inbounds %class.anon.120, ptr %29, i32 0, i32 0
  store ptr %49, ptr %195, align 8, !tbaa !60
  call void @"_ZNSt8functionIFbvEEC2IZN7DynexCN22BlockchainSynchronizer13processBlocksERNS4_17GetBlocksResponseEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 8 dereferenceable(8) %29) #10
  %196 = invoke noundef zeroext i1 @_ZN7DynexCN22BlockchainSynchronizer16setFutureStateIfENS0_5StateEOSt8functionIFbvEE(ptr noundef nonnull align 8 dereferenceable(440) %49, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %197 unwind label %228

197:                                              ; preds = %194
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #10
  %198 = getelementptr inbounds %"class.DynexCN::IObservableImpl", ptr %49, i32 0, i32 1
  %199 = call { i32, ptr } @_ZSt15make_error_codeSt4errc(i32 noundef 22) #10
  %200 = getelementptr inbounds { i32, ptr }, ptr %30, i32 0, i32 0
  %201 = extractvalue { i32, ptr } %199, 0
  store i32 %201, ptr %200, align 8
  %202 = getelementptr inbounds { i32, ptr }, ptr %30, i32 0, i32 1
  %203 = extractvalue { i32, ptr } %199, 1
  store ptr %203, ptr %202, align 8
  store { i64, i64 } { i64 9, i64 0 }, ptr %31, align 8, !tbaa !25
  %204 = getelementptr inbounds { i64, i64 }, ptr %31, i32 0, i32 0
  %205 = load i64, ptr %204, align 8
  %206 = getelementptr inbounds { i64, i64 }, ptr %31, i32 0, i32 1
  %207 = load i64, ptr %206, align 8
  %208 = getelementptr inbounds { i32, ptr }, ptr %30, i32 0, i32 0
  %209 = load i32, ptr %208, align 8
  %210 = getelementptr inbounds { i32, ptr }, ptr %30, i32 0, i32 1
  %211 = load ptr, ptr %210, align 8
  invoke void @_ZN5Tools15ObserverManagerIN7DynexCN31IBlockchainSynchronizerObserverEE6notifyIMS2_FvSt10error_codeEJS5_EEEvT_DpT0_(ptr noundef nonnull align 8 dereferenceable(64) %198, i64 %205, i64 %207, i32 %209, ptr %211)
          to label %212 unwind label %232

212:                                              ; preds = %197
  store i32 1, ptr %14, align 4
  invoke void @__cxa_end_catch()
          to label %236 unwind label %237

213:                                              ; preds = %132
  br label %244

214:                                              ; preds = %181
  %215 = landingpad { ptr, i32 }
          cleanup
  %216 = extractvalue { ptr, i32 } %215, 0
  store ptr %216, ptr %6, align 8
  %217 = extractvalue { ptr, i32 } %215, 1
  store i32 %217, ptr %7, align 4
  br label %227

218:                                              ; preds = %185
  %219 = landingpad { ptr, i32 }
          cleanup
  %220 = extractvalue { ptr, i32 } %219, 0
  store ptr %220, ptr %6, align 8
  %221 = extractvalue { ptr, i32 } %219, 1
  store i32 %221, ptr %7, align 4
  br label %226

222:                                              ; preds = %187
  %223 = landingpad { ptr, i32 }
          cleanup
  %224 = extractvalue { ptr, i32 } %223, 0
  store ptr %224, ptr %6, align 8
  %225 = extractvalue { ptr, i32 } %223, 1
  store i32 %225, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #10
  br label %226

226:                                              ; preds = %222, %218
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %26) #10
  br label %227

227:                                              ; preds = %226, %214
  call void @llvm.lifetime.end.p0(i64 432, ptr %26) #10
  br label %241

228:                                              ; preds = %194
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %6, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %7, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #10
  br label %241

232:                                              ; preds = %197
  %233 = landingpad { ptr, i32 }
          cleanup
  %234 = extractvalue { ptr, i32 } %233, 0
  store ptr %234, ptr %6, align 8
  %235 = extractvalue { ptr, i32 } %233, 1
  store i32 %235, ptr %7, align 4
  br label %241

236:                                              ; preds = %212
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  br label %247

237:                                              ; preds = %212
  %238 = landingpad { ptr, i32 }
          cleanup
  %239 = extractvalue { ptr, i32 } %238, 0
  store ptr %239, ptr %6, align 8
  %240 = extractvalue { ptr, i32 } %238, 1
  store i32 %240, ptr %7, align 4
  br label %243

241:                                              ; preds = %232, %228, %227
  invoke void @__cxa_end_catch()
          to label %242 unwind label %458

242:                                              ; preds = %241
  br label %243

243:                                              ; preds = %242, %237
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  br label %255

244:                                              ; preds = %213
  br label %245

245:                                              ; preds = %244, %103
  invoke void @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(448) %16)
          to label %246 unwind label %133

246:                                              ; preds = %245
  store i32 0, ptr %14, align 4
  br label %247

247:                                              ; preds = %246, %236
  call void @_ZN7DynexCN13CompleteBlockD2Ev(ptr noundef nonnull align 8 dereferenceable(448) %16) #10
  call void @llvm.lifetime.end.p0(i64 448, ptr %16) #10
  %248 = load i32, ptr %14, align 4
  switch i32 %248, label %250 [
    i32 0, label %249
  ]

249:                                              ; preds = %247
  store i32 0, ptr %14, align 4
  br label %250

250:                                              ; preds = %249, %247, %92
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  %251 = load i32, ptr %14, align 4
  switch i32 %251, label %257 [
    i32 0, label %252
  ]

252:                                              ; preds = %250
  br label %253

253:                                              ; preds = %252
  %254 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN7DynexCN15BlockShortEntryESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #10
  br label %76

255:                                              ; preds = %243, %177, %150, %133
  call void @_ZN7DynexCN13CompleteBlockD2Ev(ptr noundef nonnull align 8 dereferenceable(448) %16) #10
  call void @llvm.lifetime.end.p0(i64 448, ptr %16) #10
  br label %256

256:                                              ; preds = %255, %93
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #10
  br label %452

257:                                              ; preds = %250, %78
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #10
  %258 = load i32, ptr %14, align 4
  switch i32 %258, label %448 [
    i32 2, label %259
  ]

259:                                              ; preds = %257
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #10
  %260 = load ptr, ptr %4, align 8, !tbaa !5
  %261 = getelementptr inbounds %"struct.DynexCN::BlockchainSynchronizer::GetBlocksResponse", ptr %260, i32 0, i32 0
  %262 = load i32, ptr %261, align 8, !tbaa !11
  %263 = load ptr, ptr %4, align 8, !tbaa !5
  %264 = getelementptr inbounds %"struct.DynexCN::BlockchainSynchronizer::GetBlocksResponse", ptr %263, i32 0, i32 1
  %265 = call noundef i64 @_ZNKSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %264) #10
  %266 = trunc i64 %265 to i32
  %267 = add i32 %262, %266
  store i32 %267, ptr %32, align 4, !tbaa !62
  %268 = invoke noundef zeroext i1 @_ZNK7DynexCN22BlockchainSynchronizer17checkIfShouldStopEv(ptr noundef nonnull align 8 dereferenceable(440) %49)
          to label %269 unwind label %279

269:                                              ; preds = %259
  br i1 %268, label %415, label %270

270:                                              ; preds = %269
  %271 = load ptr, ptr %4, align 8, !tbaa !5
  %272 = getelementptr inbounds %"struct.DynexCN::BlockchainSynchronizer::GetBlocksResponse", ptr %271, i32 0, i32 1
  call void @_ZNSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %272) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #10
  %273 = getelementptr inbounds %"class.DynexCN::BlockchainSynchronizer", ptr %49, i32 0, i32 12
  invoke void @_ZNSt11unique_lockISt5mutexEC2ERS0_(ptr noundef nonnull align 8 dereferenceable(9) %33, ptr noundef nonnull align 8 dereferenceable(40) %273)
          to label %274 unwind label %283

274:                                              ; preds = %270
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #10
  %275 = invoke noundef i32 @_ZN7DynexCN22BlockchainSynchronizer15updateConsumersERKNS_18BlockchainIntervalERKSt6vectorINS_13CompleteBlockESaIS5_EE(ptr noundef nonnull align 8 dereferenceable(440) %49, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %276 unwind label %287

276:                                              ; preds = %274
  store i32 %275, ptr %34, align 4, !tbaa !63
  invoke void @_ZNSt11unique_lockISt5mutexE6unlockEv(ptr noundef nonnull align 8 dereferenceable(9) %33)
          to label %277 unwind label %287

277:                                              ; preds = %276
  %278 = load i32, ptr %34, align 4, !tbaa !63
  switch i32 %278, label %390 [
    i32 2, label %291
    i32 0, label %316
    i32 1, label %354
  ]

279:                                              ; preds = %422, %415, %259
  %280 = landingpad { ptr, i32 }
          cleanup
  %281 = extractvalue { ptr, i32 } %280, 0
  store ptr %281, ptr %6, align 8
  %282 = extractvalue { ptr, i32 } %280, 1
  store i32 %282, ptr %7, align 4
  br label %451

283:                                              ; preds = %270
  %284 = landingpad { ptr, i32 }
          cleanup
  %285 = extractvalue { ptr, i32 } %284, 0
  store ptr %285, ptr %6, align 8
  %286 = extractvalue { ptr, i32 } %284, 1
  store i32 %286, ptr %7, align 4
  br label %414

287:                                              ; preds = %354, %323, %316, %295, %276, %274
  %288 = landingpad { ptr, i32 }
          cleanup
  %289 = extractvalue { ptr, i32 } %288, 0
  store ptr %289, ptr %6, align 8
  %290 = extractvalue { ptr, i32 } %288, 1
  store i32 %290, ptr %7, align 4
  br label %413

291:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #10
  %292 = getelementptr inbounds %class.anon.121, ptr %36, i32 0, i32 0
  store ptr %49, ptr %292, align 8, !tbaa !65
  call void @"_ZNSt8functionIFbvEEC2IZN7DynexCN22BlockchainSynchronizer13processBlocksERNS4_17GetBlocksResponseEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 8 dereferenceable(8) %36) #10
  %293 = invoke noundef zeroext i1 @_ZN7DynexCN22BlockchainSynchronizer16setFutureStateIfENS0_5StateEOSt8functionIFbvEE(ptr noundef nonnull align 8 dereferenceable(440) %49, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(32) %35)
          to label %294 unwind label %311

294:                                              ; preds = %291
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #10
  br i1 %293, label %295, label %315

295:                                              ; preds = %294
  %296 = getelementptr inbounds %"class.DynexCN::IObservableImpl", ptr %49, i32 0, i32 1
  %297 = call { i32, ptr } @_ZSt15make_error_codeSt4errc(i32 noundef 22) #10
  %298 = getelementptr inbounds { i32, ptr }, ptr %37, i32 0, i32 0
  %299 = extractvalue { i32, ptr } %297, 0
  store i32 %299, ptr %298, align 8
  %300 = getelementptr inbounds { i32, ptr }, ptr %37, i32 0, i32 1
  %301 = extractvalue { i32, ptr } %297, 1
  store ptr %301, ptr %300, align 8
  store { i64, i64 } { i64 9, i64 0 }, ptr %38, align 8, !tbaa !25
  %302 = getelementptr inbounds { i64, i64 }, ptr %38, i32 0, i32 0
  %303 = load i64, ptr %302, align 8
  %304 = getelementptr inbounds { i64, i64 }, ptr %38, i32 0, i32 1
  %305 = load i64, ptr %304, align 8
  %306 = getelementptr inbounds { i32, ptr }, ptr %37, i32 0, i32 0
  %307 = load i32, ptr %306, align 8
  %308 = getelementptr inbounds { i32, ptr }, ptr %37, i32 0, i32 1
  %309 = load ptr, ptr %308, align 8
  invoke void @_ZN5Tools15ObserverManagerIN7DynexCN31IBlockchainSynchronizerObserverEE6notifyIMS2_FvSt10error_codeEJS5_EEEvT_DpT0_(ptr noundef nonnull align 8 dereferenceable(64) %296, i64 %303, i64 %305, i32 %307, ptr %309)
          to label %310 unwind label %287

310:                                              ; preds = %295
  br label %315

311:                                              ; preds = %291
  %312 = landingpad { ptr, i32 }
          cleanup
  %313 = extractvalue { ptr, i32 } %312, 0
  store ptr %313, ptr %6, align 8
  %314 = extractvalue { ptr, i32 } %312, 1
  store i32 %314, ptr %7, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #10
  br label %413

315:                                              ; preds = %310, %294
  br label %390

316:                                              ; preds = %277
  %317 = getelementptr inbounds %"class.DynexCN::BlockchainSynchronizer", ptr %49, i32 0, i32 4
  %318 = load ptr, ptr %317, align 8, !tbaa !67
  %319 = load ptr, ptr %318, align 8, !tbaa !58
  %320 = getelementptr inbounds ptr, ptr %319, i64 8
  %321 = load ptr, ptr %320, align 8
  %322 = invoke noundef i32 %321(ptr noundef nonnull align 8 dereferenceable(8) %318)
          to label %323 unwind label %287

323:                                              ; preds = %316
  %324 = getelementptr inbounds %"class.DynexCN::BlockchainSynchronizer", ptr %49, i32 0, i32 4
  %325 = load ptr, ptr %324, align 8, !tbaa !67
  %326 = load ptr, ptr %325, align 8, !tbaa !58
  %327 = getelementptr inbounds ptr, ptr %326, i64 7
  %328 = load ptr, ptr %327, align 8
  %329 = invoke noundef i32 %328(ptr noundef nonnull align 8 dereferenceable(8) %325)
          to label %330 unwind label %287

330:                                              ; preds = %323
  %331 = icmp ne i32 %322, %329
  br i1 %331, label %332, label %352

332:                                              ; preds = %330
  call void @llvm.lifetime.start.p0(i64 432, ptr %39) #10
  %333 = getelementptr inbounds %"class.DynexCN::BlockchainSynchronizer", ptr %49, i32 0, i32 2
  invoke void @_ZNK7Logging9LoggerRefclENS_5LevelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.Logging::LoggerMessage") align 8 %39, ptr noundef nonnull align 8 dereferenceable(40) %333, i32 noundef 4, ptr noundef nonnull align 8 dereferenceable(32) @_ZN7Logging7DEFAULTB5cxx11E)
          to label %334 unwind label %339

334:                                              ; preds = %332
  %335 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA54_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %39, ptr noundef nonnull align 1 dereferenceable(54) @.str.59)
          to label %336 unwind label %343

336:                                              ; preds = %334
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %39) #10
  call void @llvm.lifetime.end.p0(i64 432, ptr %39) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #10
  store i32 100, ptr %41, align 4, !tbaa !62
  invoke void @_ZNSt6chrono8durationIlSt5ratioILl1ELl1000EEEC2IivEERKT_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 4 dereferenceable(4) %41)
          to label %337 unwind label %348

337:                                              ; preds = %336
  invoke void @_ZNSt11this_thread9sleep_forIlSt5ratioILl1ELl1000EEEEvRKNSt6chrono8durationIT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8) %40)
          to label %338 unwind label %348

338:                                              ; preds = %337
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  br label %353

339:                                              ; preds = %332
  %340 = landingpad { ptr, i32 }
          cleanup
  %341 = extractvalue { ptr, i32 } %340, 0
  store ptr %341, ptr %6, align 8
  %342 = extractvalue { ptr, i32 } %340, 1
  store i32 %342, ptr %7, align 4
  br label %347

343:                                              ; preds = %334
  %344 = landingpad { ptr, i32 }
          cleanup
  %345 = extractvalue { ptr, i32 } %344, 0
  store ptr %345, ptr %6, align 8
  %346 = extractvalue { ptr, i32 } %344, 1
  store i32 %346, ptr %7, align 4
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %39) #10
  br label %347

347:                                              ; preds = %343, %339
  call void @llvm.lifetime.end.p0(i64 432, ptr %39) #10
  br label %413

348:                                              ; preds = %337, %336
  %349 = landingpad { ptr, i32 }
          cleanup
  %350 = extractvalue { ptr, i32 } %349, 0
  store ptr %350, ptr %6, align 8
  %351 = extractvalue { ptr, i32 } %349, 1
  store i32 %351, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  br label %413

352:                                              ; preds = %330
  br label %390

353:                                              ; preds = %338
  br label %354

354:                                              ; preds = %353, %277
  %355 = invoke noundef zeroext i1 @_ZN7DynexCN22BlockchainSynchronizer14setFutureStateENS0_5StateE(ptr noundef nonnull align 8 dereferenceable(440) %49, i32 noundef 2)
          to label %356 unwind label %287

356:                                              ; preds = %354
  %357 = getelementptr inbounds %"class.DynexCN::IObservableImpl", ptr %49, i32 0, i32 1
  %358 = load i32, ptr %32, align 4, !tbaa !62
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #10
  %359 = getelementptr inbounds %"class.DynexCN::BlockchainSynchronizer", ptr %49, i32 0, i32 4
  %360 = load ptr, ptr %359, align 8, !tbaa !67
  %361 = load ptr, ptr %360, align 8, !tbaa !58
  %362 = getelementptr inbounds ptr, ptr %361, i64 10
  %363 = load ptr, ptr %362, align 8
  %364 = invoke noundef i32 %363(ptr noundef nonnull align 8 dereferenceable(8) %360)
          to label %365 unwind label %381

365:                                              ; preds = %356
  store i32 %364, ptr %42, align 4, !tbaa !62
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #10
  %366 = getelementptr inbounds %"class.DynexCN::BlockchainSynchronizer", ptr %49, i32 0, i32 4
  %367 = load ptr, ptr %366, align 8, !tbaa !67
  %368 = load ptr, ptr %367, align 8, !tbaa !58
  %369 = getelementptr inbounds ptr, ptr %368, i64 9
  %370 = load ptr, ptr %369, align 8
  %371 = invoke noundef i32 %370(ptr noundef nonnull align 8 dereferenceable(8) %367)
          to label %372 unwind label %385

372:                                              ; preds = %365
  store i32 %371, ptr %43, align 4, !tbaa !62
  %373 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIjERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %42, ptr noundef nonnull align 4 dereferenceable(4) %43)
          to label %374 unwind label %385

374:                                              ; preds = %372
  %375 = load i32, ptr %373, align 4, !tbaa !62
  store { i64, i64 } { i64 1, i64 0 }, ptr %44, align 8, !tbaa !25
  %376 = getelementptr inbounds { i64, i64 }, ptr %44, i32 0, i32 0
  %377 = load i64, ptr %376, align 8
  %378 = getelementptr inbounds { i64, i64 }, ptr %44, i32 0, i32 1
  %379 = load i64, ptr %378, align 8
  invoke void @_ZN5Tools15ObserverManagerIN7DynexCN31IBlockchainSynchronizerObserverEE6notifyIMS2_FvjjEJjjEEEvT_DpT0_(ptr noundef nonnull align 8 dereferenceable(64) %357, i64 %377, i64 %379, i32 noundef %358, i32 noundef %375)
          to label %380 unwind label %385

380:                                              ; preds = %374
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #10
  br label %390

381:                                              ; preds = %356
  %382 = landingpad { ptr, i32 }
          cleanup
  %383 = extractvalue { ptr, i32 } %382, 0
  store ptr %383, ptr %6, align 8
  %384 = extractvalue { ptr, i32 } %382, 1
  store i32 %384, ptr %7, align 4
  br label %389

385:                                              ; preds = %374, %372, %365
  %386 = landingpad { ptr, i32 }
          cleanup
  %387 = extractvalue { ptr, i32 } %386, 0
  store ptr %387, ptr %6, align 8
  %388 = extractvalue { ptr, i32 } %386, 1
  store i32 %388, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  br label %389

389:                                              ; preds = %385, %381
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #10
  br label %413

390:                                              ; preds = %380, %352, %315, %277
  %391 = call noundef zeroext i1 @_ZNKSt6vectorIN7DynexCN13CompleteBlockESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #10
  br i1 %391, label %412, label %392

392:                                              ; preds = %390
  %393 = call noundef nonnull align 8 dereferenceable(448) ptr @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #10
  %394 = getelementptr inbounds %"struct.DynexCN::CompleteBlock", ptr %393, i32 0, i32 0
  %395 = getelementptr inbounds %"class.DynexCN::BlockchainSynchronizer", ptr %49, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %395, ptr align 8 %394, i64 32, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.start.p0(i64 432, ptr %45) #10
  %396 = getelementptr inbounds %"class.DynexCN::BlockchainSynchronizer", ptr %49, i32 0, i32 2
  invoke void @_ZNK7Logging9LoggerRefclENS_5LevelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.Logging::LoggerMessage") align 8 %45, ptr noundef nonnull align 8 dereferenceable(40) %396, i32 noundef 4, ptr noundef nonnull align 8 dereferenceable(32) @_ZN7Logging7DEFAULTB5cxx11E)
          to label %397 unwind label %403

397:                                              ; preds = %392
  %398 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA17_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %45, ptr noundef nonnull align 1 dereferenceable(17) @.str.60)
          to label %399 unwind label %407

399:                                              ; preds = %397
  %400 = getelementptr inbounds %"class.DynexCN::BlockchainSynchronizer", ptr %49, i32 0, i32 6
  %401 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEN6Crypto4HashEEOT_S5_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %398, ptr noundef nonnull align 1 dereferenceable(32) %400)
          to label %402 unwind label %407

402:                                              ; preds = %399
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %45) #10
  call void @llvm.lifetime.end.p0(i64 432, ptr %45) #10
  br label %412

403:                                              ; preds = %392
  %404 = landingpad { ptr, i32 }
          cleanup
  %405 = extractvalue { ptr, i32 } %404, 0
  store ptr %405, ptr %6, align 8
  %406 = extractvalue { ptr, i32 } %404, 1
  store i32 %406, ptr %7, align 4
  br label %411

407:                                              ; preds = %399, %397
  %408 = landingpad { ptr, i32 }
          cleanup
  %409 = extractvalue { ptr, i32 } %408, 0
  store ptr %409, ptr %6, align 8
  %410 = extractvalue { ptr, i32 } %408, 1
  store i32 %410, ptr %7, align 4
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %45) #10
  br label %411

411:                                              ; preds = %407, %403
  call void @llvm.lifetime.end.p0(i64 432, ptr %45) #10
  br label %413

412:                                              ; preds = %402, %390
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  call void @_ZNSt11unique_lockISt5mutexED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %33) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #10
  br label %415

413:                                              ; preds = %411, %389, %348, %347, %311, %287
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  call void @_ZNSt11unique_lockISt5mutexED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %33) #10
  br label %414

414:                                              ; preds = %413, %283
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #10
  br label %451

415:                                              ; preds = %412, %269
  %416 = invoke noundef zeroext i1 @_ZNK7DynexCN22BlockchainSynchronizer17checkIfShouldStopEv(ptr noundef nonnull align 8 dereferenceable(440) %49)
          to label %417 unwind label %279

417:                                              ; preds = %415
  br i1 %416, label %418, label %447

418:                                              ; preds = %417
  call void @llvm.lifetime.start.p0(i64 432, ptr %46) #10
  %419 = getelementptr inbounds %"class.DynexCN::BlockchainSynchronizer", ptr %49, i32 0, i32 2
  invoke void @_ZNK7Logging9LoggerRefclENS_5LevelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.Logging::LoggerMessage") align 8 %46, ptr noundef nonnull align 8 dereferenceable(40) %419, i32 noundef 2, ptr noundef nonnull align 8 dereferenceable(32) @_ZN7Logging13BRIGHT_YELLOWB5cxx11E)
          to label %420 unwind label %438

420:                                              ; preds = %418
  %421 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA32_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %46, ptr noundef nonnull align 1 dereferenceable(32) @.str.61)
          to label %422 unwind label %442

422:                                              ; preds = %420
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %46) #10
  call void @llvm.lifetime.end.p0(i64 432, ptr %46) #10
  %423 = getelementptr inbounds %"class.DynexCN::IObservableImpl", ptr %49, i32 0, i32 1
  %424 = call { i32, ptr } @_ZSt15make_error_codeSt4errc(i32 noundef 4) #10
  %425 = getelementptr inbounds { i32, ptr }, ptr %47, i32 0, i32 0
  %426 = extractvalue { i32, ptr } %424, 0
  store i32 %426, ptr %425, align 8
  %427 = getelementptr inbounds { i32, ptr }, ptr %47, i32 0, i32 1
  %428 = extractvalue { i32, ptr } %424, 1
  store ptr %428, ptr %427, align 8
  store { i64, i64 } { i64 9, i64 0 }, ptr %48, align 8, !tbaa !25
  %429 = getelementptr inbounds { i64, i64 }, ptr %48, i32 0, i32 0
  %430 = load i64, ptr %429, align 8
  %431 = getelementptr inbounds { i64, i64 }, ptr %48, i32 0, i32 1
  %432 = load i64, ptr %431, align 8
  %433 = getelementptr inbounds { i32, ptr }, ptr %47, i32 0, i32 0
  %434 = load i32, ptr %433, align 8
  %435 = getelementptr inbounds { i32, ptr }, ptr %47, i32 0, i32 1
  %436 = load ptr, ptr %435, align 8
  invoke void @_ZN5Tools15ObserverManagerIN7DynexCN31IBlockchainSynchronizerObserverEE6notifyIMS2_FvSt10error_codeEJS5_EEEvT_DpT0_(ptr noundef nonnull align 8 dereferenceable(64) %423, i64 %430, i64 %432, i32 %434, ptr %436)
          to label %437 unwind label %279

437:                                              ; preds = %422
  br label %447

438:                                              ; preds = %418
  %439 = landingpad { ptr, i32 }
          cleanup
  %440 = extractvalue { ptr, i32 } %439, 0
  store ptr %440, ptr %6, align 8
  %441 = extractvalue { ptr, i32 } %439, 1
  store i32 %441, ptr %7, align 4
  br label %446

442:                                              ; preds = %420
  %443 = landingpad { ptr, i32 }
          cleanup
  %444 = extractvalue { ptr, i32 } %443, 0
  store ptr %444, ptr %6, align 8
  %445 = extractvalue { ptr, i32 } %443, 1
  store i32 %445, ptr %7, align 4
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %46) #10
  br label %446

446:                                              ; preds = %442, %438
  call void @llvm.lifetime.end.p0(i64 432, ptr %46) #10
  br label %451

447:                                              ; preds = %437, %417
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  store i32 0, ptr %14, align 4
  br label %448

448:                                              ; preds = %447, %257
  call void @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #10
  call void @_ZN7DynexCN18BlockchainIntervalD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %9) #10
  %449 = load i32, ptr %14, align 4
  switch i32 %449, label %461 [
    i32 0, label %450
    i32 1, label %450
  ]

450:                                              ; preds = %448, %448
  ret void

451:                                              ; preds = %446, %414, %279
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  br label %452

452:                                              ; preds = %451, %256
  call void @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #10
  call void @_ZN7DynexCN18BlockchainIntervalD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %9) #10
  br label %453

453:                                              ; preds = %452, %87
  %454 = load ptr, ptr %6, align 8
  %455 = load i32, ptr %7, align 4
  %456 = insertvalue { ptr, i32 } poison, ptr %454, 0
  %457 = insertvalue { ptr, i32 } %456, i32 %455, 1
  resume { ptr, i32 } %457

458:                                              ; preds = %241
  %459 = landingpad { ptr, i32 }
          catch ptr null
  %460 = extractvalue { ptr, i32 } %459, 0
  call void @__clang_call_terminate(ptr %460) #11
  unreachable

461:                                              ; preds = %448
  unreachable
}

; Function Attrs: nounwind memory(none)
declare i32 @llvm.eh.typeid.for.p0(ptr) #8

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { i32, ptr } @_ZSt15make_error_codeSt4errc(i32 noundef) #9

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA29_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 1 dereferenceable(29)) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7DynexCN18BlockchainIntervalC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #9 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPN7DynexCN15BlockShortEntryESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #9

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(448) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN7DynexCN15BlockShortEntryESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7DynexCN13CompleteBlockC2Ev(ptr noundef nonnull align 8 dereferenceable(448)) unnamed_addr #9 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN6Crypto4HashESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 1 dereferenceable(32)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(392) ptr @_ZN5boost8optionalIN7DynexCN5BlockEEaSIS2_EENS_9enable_ifINS_7is_sameIS2_NS_5decayIT_E4typeEEERS3_E4typeEOS8_(ptr noundef nonnull align 8 dereferenceable(392), ptr noundef nonnull align 8 dereferenceable(384)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx114listISt10shared_ptrIN7DynexCN18ITransactionReaderEESaIS4_EE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(16)) #3 align 2

declare void @_ZN7DynexCN23createTransactionPrefixERKNS_11TransactionE(ptr dead_on_unwind writable sret(%"class.std::unique_ptr.111") align 8, ptr noundef nonnull align 8 dereferenceable(112)) #5

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN5boost8optionalIN7DynexCN5BlockEEptEv(ptr noundef nonnull align 8 dereferenceable(392)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt10shared_ptrIN7DynexCN18ITransactionReaderEEC2IS1_St14default_deleteIS1_EvEEOSt10unique_ptrIT_T0_E(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt12__shared_ptrIN7DynexCN18ITransactionReaderELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrIN7DynexCN18ITransactionReaderESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN7DynexCN20TransactionShortInfoESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN7DynexCN20TransactionShortInfoESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPN7DynexCN20TransactionShortInfoESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #9

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(120) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN7DynexCN20TransactionShortInfoESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #7 align 2

declare void @_ZN7DynexCN23createTransactionPrefixERKNS_17TransactionPrefixERKN6Crypto4HashE(ptr dead_on_unwind writable sret(%"class.std::unique_ptr.111") align 8, ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 1 dereferenceable(32)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN7DynexCN20TransactionShortInfoESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA27_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 1 dereferenceable(27)) #4

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFbvEEC2IZN7DynexCN22BlockchainSynchronizer13processBlocksERNS4_17GetBlocksResponseEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(448)) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7DynexCN13CompleteBlockD2Ev(ptr noundef nonnull align 8 dereferenceable(448)) unnamed_addr #9 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN7DynexCN15BlockShortEntryESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN7DynexCN22BlockchainSynchronizer15updateConsumersERKNS_18BlockchainIntervalERKSt6vectorINS_13CompleteBlockESaIS5_EE(ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFbvEEC2IZN7DynexCN22BlockchainSynchronizer13processBlocksERNS4_17GetBlocksResponseEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA54_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 1 dereferenceable(54)) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNSt11this_thread9sleep_forIlSt5ratioILl1ELl1000EEEEvRKNSt6chrono8durationIT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8)) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6chrono8durationIlSt5ratioILl1ELl1000EEEC2IivEERKT_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN5Tools15ObserverManagerIN7DynexCN31IBlockchainSynchronizerObserverEE6notifyIMS2_FvjjEJjjEEEvT_DpT0_(ptr noundef nonnull align 8 dereferenceable(64), i64, i64, i32 noundef, i32 noundef) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIjERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #9

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIN7DynexCN13CompleteBlockESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(448) ptr @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24)) #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA32_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 1 dereferenceable(32)) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7DynexCN18BlockchainIntervalD2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #9 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { noinline noreturn nounwind uwtable "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind memory(none) }
attributes #9 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { nounwind }
attributes #11 = { noreturn nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !13, i64 0}
!12 = !{!"_ZTSN7DynexCN22BlockchainSynchronizer17GetBlocksResponseE", !13, i64 0, !14, i64 8}
!13 = !{!"int", !7, i64 0}
!14 = !{!"_ZTSSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE", !15, i64 0}
!15 = !{!"_ZTSSt12_Vector_baseIN7DynexCN15BlockShortEntryESaIS1_EE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIN7DynexCN15BlockShortEntryESaIS1_EE12_Vector_implE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIN7DynexCN15BlockShortEntryESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!18 = !{!19, !13, i64 0}
!19 = !{!"_ZTSN7DynexCN18BlockchainIntervalE", !13, i64 0, !20, i64 8}
!20 = !{!"_ZTSSt6vectorIN6Crypto4HashESaIS1_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIN6Crypto4HashESaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIN6Crypto4HashESaIS1_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIN6Crypto4HashESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!24 = !{i64 0, i64 32, !25}
!25 = !{!7, !7, i64 0}
!26 = !{!27, !29, i64 32}
!27 = !{!"_ZTSN7DynexCN15BlockShortEntryE", !28, i64 0, !29, i64 32, !30, i64 40, !52, i64 424}
!28 = !{!"_ZTSN6Crypto4HashE", !7, i64 0}
!29 = !{!"bool", !7, i64 0}
!30 = !{!"_ZTSN7DynexCN5BlockE", !31, i64 0, !32, i64 48, !34, i64 248, !20, i64 360}
!31 = !{!"_ZTSN7DynexCN11BlockHeaderE", !7, i64 0, !7, i64 1, !13, i64 4, !10, i64 8, !28, i64 16}
!32 = !{!"_ZTSN7DynexCN11ParentBlockE", !7, i64 0, !7, i64 1, !28, i64 2, !33, i64 34, !20, i64 40, !34, i64 64, !20, i64 176}
!33 = !{!"short", !7, i64 0}
!34 = !{!"_ZTSN7DynexCN11TransactionE", !35, i64 0, !48, i64 88}
!35 = !{!"_ZTSN7DynexCN17TransactionPrefixE", !7, i64 0, !10, i64 8, !36, i64 16, !40, i64 40, !44, i64 64}
!36 = !{!"_ZTSSt6vectorIN5boost7variantIN7DynexCN9BaseInputEJNS2_8KeyInputENS2_19MultisignatureInputEEEESaIS6_EE", !37, i64 0}
!37 = !{!"_ZTSSt12_Vector_baseIN5boost7variantIN7DynexCN9BaseInputEJNS2_8KeyInputENS2_19MultisignatureInputEEEESaIS6_EE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseIN5boost7variantIN7DynexCN9BaseInputEJNS2_8KeyInputENS2_19MultisignatureInputEEEESaIS6_EE12_Vector_implE", !39, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseIN5boost7variantIN7DynexCN9BaseInputEJNS2_8KeyInputENS2_19MultisignatureInputEEEESaIS6_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!40 = !{!"_ZTSSt6vectorIN7DynexCN17TransactionOutputESaIS1_EE", !41, i64 0}
!41 = !{!"_ZTSSt12_Vector_baseIN7DynexCN17TransactionOutputESaIS1_EE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIN7DynexCN17TransactionOutputESaIS1_EE12_Vector_implE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIN7DynexCN17TransactionOutputESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!44 = !{!"_ZTSSt6vectorIhSaIhEE", !45, i64 0}
!45 = !{!"_ZTSSt12_Vector_baseIhSaIhEE", !46, i64 0}
!46 = !{!"_ZTSNSt12_Vector_baseIhSaIhEE12_Vector_implE", !47, i64 0}
!47 = !{!"_ZTSNSt12_Vector_baseIhSaIhEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!48 = !{!"_ZTSSt6vectorIS_IN6Crypto9SignatureESaIS1_EESaIS3_EE", !49, i64 0}
!49 = !{!"_ZTSSt12_Vector_baseISt6vectorIN6Crypto9SignatureESaIS2_EESaIS4_EE", !50, i64 0}
!50 = !{!"_ZTSNSt12_Vector_baseISt6vectorIN6Crypto9SignatureESaIS2_EESaIS4_EE12_Vector_implE", !51, i64 0}
!51 = !{!"_ZTSNSt12_Vector_baseISt6vectorIN6Crypto9SignatureESaIS2_EESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!52 = !{!"_ZTSSt6vectorIN7DynexCN20TransactionShortInfoESaIS1_EE", !53, i64 0}
!53 = !{!"_ZTSSt12_Vector_baseIN7DynexCN20TransactionShortInfoESaIS1_EE", !54, i64 0}
!54 = !{!"_ZTSNSt12_Vector_baseIN7DynexCN20TransactionShortInfoESaIS1_EE12_Vector_implE", !55, i64 0}
!55 = !{!"_ZTSNSt12_Vector_baseIN7DynexCN20TransactionShortInfoESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!56 = !{i8 0, i8 2}
!57 = !{}
!58 = !{!59, !59, i64 0}
!59 = !{!"vtable pointer", !8, i64 0}
!60 = !{!61, !6, i64 0}
!61 = !{!"_ZTSZN7DynexCN22BlockchainSynchronizer13processBlocksERNS0_17GetBlocksResponseEE3$_0", !6, i64 0}
!62 = !{!13, !13, i64 0}
!63 = !{!64, !64, i64 0}
!64 = !{!"_ZTSN7DynexCN22BlockchainSynchronizer21UpdateConsumersResultE", !7, i64 0}
!65 = !{!66, !6, i64 0}
!66 = !{!"_ZTSZN7DynexCN22BlockchainSynchronizer13processBlocksERNS0_17GetBlocksResponseEE3$_1", !6, i64 0}
!67 = !{!68, !6, i64 176}
!68 = !{!"_ZTSN7DynexCN22BlockchainSynchronizerE", !69, i64 0, !80, i64 80, !81, i64 88, !84, i64 128, !6, i64 176, !28, i64 184, !28, i64 216, !92, i64 248, !92, i64 252, !93, i64 256, !99, i64 264, !104, i64 288, !78, i64 312, !78, i64 352, !107, i64 392}
!69 = !{!"_ZTSN7DynexCN15IObservableImplINS_31IBlockchainSynchronizerObserverENS_23IBlockchainSynchronizerEEE", !70, i64 0, !73, i64 16}
!70 = !{!"_ZTSN7DynexCN23IBlockchainSynchronizerE", !71, i64 0, !72, i64 8}
!71 = !{!"_ZTSN7DynexCN11IObservableINS_31IBlockchainSynchronizerObserverEEE"}
!72 = !{!"_ZTSN7DynexCN19IStreamSerializableE"}
!73 = !{!"_ZTSN5Tools15ObserverManagerIN7DynexCN31IBlockchainSynchronizerObserverEEE", !74, i64 0, !78, i64 24}
!74 = !{!"_ZTSSt6vectorIPN7DynexCN31IBlockchainSynchronizerObserverESaIS2_EE", !75, i64 0}
!75 = !{!"_ZTSSt12_Vector_baseIPN7DynexCN31IBlockchainSynchronizerObserverESaIS2_EE", !76, i64 0}
!76 = !{!"_ZTSNSt12_Vector_baseIPN7DynexCN31IBlockchainSynchronizerObserverESaIS2_EE12_Vector_implE", !77, i64 0}
!77 = !{!"_ZTSNSt12_Vector_baseIPN7DynexCN31IBlockchainSynchronizerObserverESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!78 = !{!"_ZTSSt5mutex", !79, i64 0}
!79 = !{!"_ZTSSt12__mutex_base", !7, i64 0}
!80 = !{!"_ZTSN7DynexCN13INodeObserverE"}
!81 = !{!"_ZTSN7Logging9LoggerRefE", !6, i64 0, !82, i64 8}
!82 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !83, i64 0, !10, i64 8, !7, i64 16}
!83 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!84 = !{!"_ZTSSt3mapIPN7DynexCN19IBlockchainConsumerESt10shared_ptrINS0_20SynchronizationStateEESt4lessIS2_ESaISt4pairIKS2_S5_EEE", !85, i64 0}
!85 = !{!"_ZTSSt8_Rb_treeIPN7DynexCN19IBlockchainConsumerESt4pairIKS2_St10shared_ptrINS0_20SynchronizationStateEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE", !86, i64 0}
!86 = !{!"_ZTSNSt8_Rb_treeIPN7DynexCN19IBlockchainConsumerESt4pairIKS2_St10shared_ptrINS0_20SynchronizationStateEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE13_Rb_tree_implISC_Lb1EEE", !87, i64 0, !89, i64 8}
!87 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIPN7DynexCN19IBlockchainConsumerEEE", !88, i64 0}
!88 = !{!"_ZTSSt4lessIPN7DynexCN19IBlockchainConsumerEE"}
!89 = !{!"_ZTSSt15_Rb_tree_header", !90, i64 0, !10, i64 32}
!90 = !{!"_ZTSSt18_Rb_tree_node_base", !91, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!91 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!92 = !{!"_ZTSN7DynexCN22BlockchainSynchronizer5StateE", !7, i64 0}
!93 = !{!"_ZTSSt10unique_ptrISt6threadSt14default_deleteIS0_EE", !94, i64 0}
!94 = !{!"_ZTSSt15__uniq_ptr_dataISt6threadSt14default_deleteIS0_ELb1ELb1EE", !95, i64 0}
!95 = !{!"_ZTSSt15__uniq_ptr_implISt6threadSt14default_deleteIS0_EE", !96, i64 0}
!96 = !{!"_ZTSSt5tupleIJPSt6threadSt14default_deleteIS0_EEE", !97, i64 0}
!97 = !{!"_ZTSSt11_Tuple_implILm0EJPSt6threadSt14default_deleteIS0_EEE", !98, i64 0}
!98 = !{!"_ZTSSt10_Head_baseILm0EPSt6threadLb0EE", !6, i64 0}
!99 = !{!"_ZTSNSt7__cxx114listISt4pairIPKN7DynexCN18ITransactionReaderESt7promiseISt10error_codeEESaIS9_EEE", !100, i64 0}
!100 = !{!"_ZTSNSt7__cxx1110_List_baseISt4pairIPKN7DynexCN18ITransactionReaderESt7promiseISt10error_codeEESaIS9_EEE", !101, i64 0}
!101 = !{!"_ZTSNSt7__cxx1110_List_baseISt4pairIPKN7DynexCN18ITransactionReaderESt7promiseISt10error_codeEESaIS9_EE10_List_implE", !102, i64 0}
!102 = !{!"_ZTSNSt8__detail17_List_node_headerE", !103, i64 0, !10, i64 16}
!103 = !{!"_ZTSNSt8__detail15_List_node_baseE", !6, i64 0, !6, i64 8}
!104 = !{!"_ZTSNSt7__cxx114listISt4pairIPKN6Crypto4HashESt7promiseIvEESaIS8_EEE", !105, i64 0}
!105 = !{!"_ZTSNSt7__cxx1110_List_baseISt4pairIPKN6Crypto4HashESt7promiseIvEESaIS8_EEE", !106, i64 0}
!106 = !{!"_ZTSNSt7__cxx1110_List_baseISt4pairIPKN6Crypto4HashESt7promiseIvEESaIS8_EE10_List_implE", !102, i64 0}
!107 = !{!"_ZTSSt18condition_variable", !108, i64 0}
!108 = !{!"_ZTSSt9__condvar", !7, i64 0}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.Logging::LoggerMessage" = type <{ %"class.std::basic_ostream.base", %"class.std::basic_streambuf", ptr, %"class.std::__cxx11::basic_string", i32, [4 x i8], %"class.std::__cxx11::basic_string", %"class.boost::posix_time::ptime", i8, [7 x i8], %"class.std::basic_ios" }>
%"class.std::basic_ostream.base" = type { ptr }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%"class.boost::posix_time::ptime" = type { %"class.boost::date_time::base_time" }
%"class.boost::date_time::base_time" = type { %"struct.boost::date_time::counted_time_rep" }
%"struct.boost::date_time::counted_time_rep" = type { %"class.boost::date_time::int_adapter" }
%"class.boost::date_time::int_adapter" = type { i64 }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"struct.DynexCN::BlockchainInterval" = type { i32, %"class.std::vector.23" }
%"class.std::vector.23" = type { %"struct.std::_Vector_base.24" }
%"struct.std::_Vector_base.24" = type { %"struct.std::_Vector_base<Crypto::Hash, std::allocator<Crypto::Hash>>::_Vector_impl" }
%"struct.std::_Vector_base<Crypto::Hash, std::allocator<Crypto::Hash>>::_Vector_impl" = type { %"struct.std::_Vector_base<Crypto::Hash, std::allocator<Crypto::Hash>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Crypto::Hash, std::allocator<Crypto::Hash>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.73" = type { %"struct.std::_Vector_base.74" }
%"struct.std::_Vector_base.74" = type { %"struct.std::_Vector_base<DynexCN::CompleteBlock, std::allocator<DynexCN::CompleteBlock>>::_Vector_impl" }
%"struct.std::_Vector_base<DynexCN::CompleteBlock, std::allocator<DynexCN::CompleteBlock>>::_Vector_impl" = type { %"struct.std::_Vector_base<DynexCN::CompleteBlock, std::allocator<DynexCN::CompleteBlock>>::_Vector_impl_data" }
%"struct.std::_Vector_base<DynexCN::CompleteBlock, std::allocator<DynexCN::CompleteBlock>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"struct.DynexCN::CompleteBlock" = type { %"struct.Crypto::Hash", %"class.boost::optional", %"class.std::__cxx11::list.103" }
%"struct.Crypto::Hash" = type { [32 x i8] }
%"class.boost::optional" = type { %"class.boost::optional_detail::optional_base" }
%"class.boost::optional_detail::optional_base" = type { i8, [7 x i8], %"class.boost::optional_detail::aligned_storage" }
%"class.boost::optional_detail::aligned_storage" = type { %"union.boost::optional_detail::aligned_storage<DynexCN::Block>::dummy_u" }
%"union.boost::optional_detail::aligned_storage<DynexCN::Block>::dummy_u" = type { [384 x i8] }
%"class.std::__cxx11::list.103" = type { %"class.std::__cxx11::_List_base.104" }
%"class.std::__cxx11::_List_base.104" = type { %"struct.std::__cxx11::_List_base<std::shared_ptr<DynexCN::ITransactionReader>, std::allocator<std::shared_ptr<DynexCN::ITransactionReader>>>::_List_impl" }
%"struct.std::__cxx11::_List_base<std::shared_ptr<DynexCN::ITransactionReader>, std::allocator<std::shared_ptr<DynexCN::ITransactionReader>>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { ptr, ptr }
%"class.std::shared_ptr.108" = type { %"class.std::__shared_ptr.109" }
%"class.std::__shared_ptr.109" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::unique_ptr.111" = type { %"struct.std::__uniq_ptr_data.112" }
%"struct.std::__uniq_ptr_data.112" = type { %"class.std::__uniq_ptr_impl.113" }
%"class.std::__uniq_ptr_impl.113" = type { %"class.std::tuple.114" }
%"class.std::tuple.114" = type { %"struct.std::_Tuple_impl.115" }
%"struct.std::_Tuple_impl.115" = type { %"struct.std::_Head_base.118" }
%"struct.std::_Head_base.118" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.119" = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.120 = type { ptr }
%"class.std::unique_lock" = type <{ ptr, i8, [7 x i8] }>
%class.anon.121 = type { ptr }
%"class.std::chrono::duration" = type { i64 }

@_ZN7Logging10BRIGHT_REDB5cxx11E = external global %"class.std::__cxx11::basic_string", align 8
@.str.13 = external hidden unnamed_addr constant [9 x i8], align 1
@_ZN7Logging7DEFAULTB5cxx11E = external global %"class.std::__cxx11::basic_string", align 8
@_ZTISt9exception = external constant ptr
@.str.57 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZN7Logging13BRIGHT_YELLOWB5cxx11E = external global %"class.std::__cxx11::basic_string", align 8
@.str.61 = external hidden unnamed_addr constant [32 x i8], align 1

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

declare i32 @__gxx_personality_v0(...)

; Function Attrs: noinline noreturn nounwind uwtable
declare hidden void @__clang_call_terminate(ptr noundef) local_unnamed_addr #2

declare ptr @__cxa_begin_catch(ptr) local_unnamed_addr

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK7DynexCN22BlockchainSynchronizer17checkIfShouldStopEv(ptr noundef nonnull align 8 dereferenceable(440)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEPKcEOT_S5_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4

declare void @_ZNK7Logging9LoggerRefclENS_5LevelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.Logging::LoggerMessage") align 8, ptr noundef nonnull align 8 dereferenceable(40), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5

; Function Attrs: nounwind
declare void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161)) unnamed_addr #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEmEOT_S3_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA9_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 1 dereferenceable(9)) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt11unique_lockISt5mutexEC2ERS0_(ptr noundef nonnull align 8 dereferenceable(9), ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt11unique_lockISt5mutexED2Ev(ptr noundef nonnull align 8 dereferenceable(9)) unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEN6Crypto4HashEEOT_S5_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 1 dereferenceable(32)) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN7DynexCN22BlockchainSynchronizer14setFutureStateENS0_5StateE(ptr noundef nonnull align 8 dereferenceable(440), i32 noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN7DynexCN22BlockchainSynchronizer16setFutureStateIfENS0_5StateEOSt8functionIFbvEE(ptr noundef nonnull align 8 dereferenceable(440), i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3 align 2

declare void @__cxa_end_catch() local_unnamed_addr

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt11unique_lockISt5mutexE6unlockEv(ptr noundef nonnull align 8 dereferenceable(9)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEjEOT_S3_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA17_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 1 dereferenceable(17)) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN5Tools15ObserverManagerIN7DynexCN31IBlockchainSynchronizerObserverEE6notifyIMS2_FvSt10error_codeEJS5_EEEvT_DpT0_(ptr noundef nonnull align 8 dereferenceable(64), i64, i64, i32, ptr) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7DynexCN22BlockchainSynchronizer13processBlocksERNS0_17GetBlocksResponseE(ptr noundef nonnull align 8 dereferenceable(440) %0, ptr noundef nonnull align 8 dereferenceable(32) %1) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.Logging::LoggerMessage", align 8
  %4 = alloca i64, align 8
  %5 = alloca %"struct.DynexCN::BlockchainInterval", align 8
  %6 = alloca %"class.std::vector.73", align 8
  %7 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %8 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %9 = alloca %"struct.DynexCN::CompleteBlock", align 8
  %10 = alloca %"class.std::shared_ptr.108", align 8
  %11 = alloca %"class.std::unique_ptr.111", align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator.119", align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.119", align 8
  %14 = alloca %"class.std::shared_ptr.108", align 8
  %15 = alloca %"class.std::unique_ptr.111", align 8
  %16 = alloca %"class.Logging::LoggerMessage", align 8
  %17 = alloca ptr, align 8
  %18 = alloca %"class.std::function", align 8
  %19 = alloca %class.anon.120, align 8
  %20 = alloca %"class.std::unique_lock", align 8
  %21 = alloca %"class.std::function", align 8
  %22 = alloca %class.anon.121, align 8
  %23 = alloca %"class.Logging::LoggerMessage", align 8
  %24 = alloca %"class.std::chrono::duration", align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca %"class.Logging::LoggerMessage", align 8
  %29 = alloca %"class.Logging::LoggerMessage", align 8
  call void @llvm.lifetime.start.p0(i64 432, ptr nonnull %3) #10
  %30 = getelementptr inbounds i8, ptr %0, i64 88
  call void @_ZNK7Logging9LoggerRefclENS_5LevelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.Logging::LoggerMessage") align 8 %3, ptr noundef nonnull align 8 dereferenceable(40) %30, i32 noundef 4, ptr noundef nonnull align 8 dereferenceable(32) @_ZN7Logging7DEFAULTB5cxx11E)
  %31 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA29_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %3, ptr noundef nonnull align 1 dereferenceable(29) @.str.57)
          to label %32 unwind label %48

32:                                               ; preds = %2
  %33 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEjEOT_S3_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %31, ptr noundef nonnull align 4 dereferenceable(4) %1)
          to label %34 unwind label %48

34:                                               ; preds = %32
  %35 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA9_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %33, ptr noundef nonnull align 1 dereferenceable(9) @.str.13)
          to label %36 unwind label %48

36:                                               ; preds = %34
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #10
  %37 = getelementptr inbounds i8, ptr %1, i64 8
  %38 = call noundef i64 @_ZNKSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %37) #10
  store i64 %38, ptr %4, align 8, !tbaa !5
  %39 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEmEOT_S3_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %35, ptr noundef nonnull align 8 dereferenceable(8) %4)
          to label %40 unwind label %50

40:                                               ; preds = %36
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #10
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %3) #10
  call void @llvm.lifetime.end.p0(i64 432, ptr nonnull %3) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #10
  call void @_ZN7DynexCN18BlockchainIntervalC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #10
  %41 = load i32, ptr %1, align 8, !tbaa !9
  store i32 %41, ptr %5, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #10
  call void @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #10
  %42 = call ptr @_ZNSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %37) #10
  store ptr %42, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #10
  %43 = call ptr @_ZNSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %37) #10
  store ptr %43, ptr %8, align 8
  %44 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN7DynexCN15BlockShortEntryESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #10
  br i1 %44, label %.lr.ph99, label %.thread

.lr.ph99:                                         ; preds = %40
  %45 = getelementptr inbounds i8, ptr %5, i64 8
  %46 = getelementptr inbounds i8, ptr %9, i64 32
  %47 = getelementptr inbounds i8, ptr %9, i64 424
  br label %53

48:                                               ; preds = %34, %32, %2
  %49 = landingpad { ptr, i32 }
          cleanup
  br label %52

50:                                               ; preds = %36
  %51 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #10
  br label %52

52:                                               ; preds = %50, %48
  %.pn = phi { ptr, i32 } [ %51, %50 ], [ %49, %48 ]
  %.0 = extractvalue { ptr, i32 } %.pn, 0
  %.041 = extractvalue { ptr, i32 } %.pn, 1
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %3) #10
  call void @llvm.lifetime.end.p0(i64 432, ptr nonnull %3) #10
  br label %266

53:                                               ; preds = %.lr.ph99, %144
  %54 = call noundef nonnull align 8 dereferenceable(448) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN7DynexCN15BlockShortEntryESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %55 = invoke noundef zeroext i1 @_ZNK7DynexCN22BlockchainSynchronizer17checkIfShouldStopEv(ptr noundef nonnull align 8 dereferenceable(440) %0)
          to label %56 unwind label %57

56:                                               ; preds = %53
  br i1 %55, label %.thread, label %61

57:                                               ; preds = %53
  %58 = landingpad { ptr, i32 }
          cleanup
  %59 = extractvalue { ptr, i32 } %58, 0
  %60 = extractvalue { ptr, i32 } %58, 1
  br label %148

61:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 448, ptr nonnull %9) #10
  call void @_ZN7DynexCN13CompleteBlockC2Ev(ptr noundef nonnull align 8 dereferenceable(448) %9) #10
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 8 dereferenceable(32) %54, i64 32, i1 false), !tbaa.struct !23
  invoke void @_ZNSt6vectorIN6Crypto4HashESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %45, ptr noundef nonnull align 1 dereferenceable(32) %9)
          to label %62 unwind label %80

62:                                               ; preds = %61
  %63 = getelementptr inbounds i8, ptr %54, i64 32
  %64 = load i8, ptr %63, align 8, !tbaa !25, !range !55, !noundef !56
  %65 = trunc nuw i8 %64 to i1
  br i1 %65, label %66, label %143

66:                                               ; preds = %62
  %67 = getelementptr inbounds i8, ptr %54, i64 40
  %68 = invoke noundef nonnull align 8 dereferenceable(392) ptr @_ZN5boost8optionalIN7DynexCN5BlockEEaSIS2_EENS_9enable_ifINS_7is_sameIS2_NS_5decayIT_E4typeEEERS3_E4typeEOS8_(ptr noundef nonnull align 8 dereferenceable(392) %46, ptr noundef nonnull align 8 dereferenceable(384) %67)
          to label %69 unwind label %80

69:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #10
  %70 = invoke noundef ptr @_ZN5boost8optionalIN7DynexCN5BlockEEptEv(ptr noundef nonnull align 8 dereferenceable(392) %46)
          to label %71 unwind label %84

71:                                               ; preds = %69
  %72 = getelementptr inbounds i8, ptr %70, i64 248
  invoke void @_ZN7DynexCN23createTransactionPrefixERKNS_11TransactionE(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr.111") align 8 %11, ptr noundef nonnull align 8 dereferenceable(112) %72)
          to label %73 unwind label %84

73:                                               ; preds = %71
  invoke void @_ZNSt10shared_ptrIN7DynexCN18ITransactionReaderEEC2IS1_St14default_deleteIS1_EvEEOSt10unique_ptrIT_T0_E(ptr noundef nonnull align 8 dereferenceable(16) %10, ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %74 unwind label %86

74:                                               ; preds = %73
  invoke void @_ZNSt7__cxx114listISt10shared_ptrIN7DynexCN18ITransactionReaderEESaIS4_EE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 8 dereferenceable(16) %10)
          to label %75 unwind label %88

75:                                               ; preds = %74
  call void @_ZNSt12__shared_ptrIN7DynexCN18ITransactionReaderELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #10
  call void @_ZNSt10unique_ptrIN7DynexCN18ITransactionReaderESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #10
  %76 = getelementptr inbounds i8, ptr %54, i64 424
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #10
  %77 = call ptr @_ZNSt6vectorIN7DynexCN20TransactionShortInfoESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %76) #10
  store ptr %77, ptr %12, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #10
  %78 = call ptr @_ZNSt6vectorIN7DynexCN20TransactionShortInfoESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %76) #10
  store ptr %78, ptr %13, align 8
  %79 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN7DynexCN20TransactionShortInfoESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #10
  br i1 %79, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %96, %75
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  br label %143

80:                                               ; preds = %143, %66, %61
  %81 = landingpad { ptr, i32 }
          cleanup
  %82 = extractvalue { ptr, i32 } %81, 0
  %83 = extractvalue { ptr, i32 } %81, 1
  br label %147

84:                                               ; preds = %71, %69
  %85 = landingpad { ptr, i32 }
          cleanup
  br label %91

86:                                               ; preds = %73
  %87 = landingpad { ptr, i32 }
          cleanup
  br label %90

88:                                               ; preds = %74
  %89 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt12__shared_ptrIN7DynexCN18ITransactionReaderELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #10
  br label %90

90:                                               ; preds = %88, %86
  %.pn65 = phi { ptr, i32 } [ %89, %88 ], [ %87, %86 ]
  call void @_ZNSt10unique_ptrIN7DynexCN18ITransactionReaderESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #10
  br label %91

91:                                               ; preds = %90, %84
  %.pn65.pn = phi { ptr, i32 } [ %.pn65, %90 ], [ %85, %84 ]
  %.2 = extractvalue { ptr, i32 } %.pn65.pn, 0
  %.243 = extractvalue { ptr, i32 } %.pn65.pn, 1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #10
  br label %147

.lr.ph:                                           ; preds = %75, %96
  %92 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN7DynexCN20TransactionShortInfoESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #10
  %93 = getelementptr inbounds i8, ptr %92, i64 32
  invoke void @_ZN7DynexCN23createTransactionPrefixERKNS_17TransactionPrefixERKN6Crypto4HashE(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr.111") align 8 %15, ptr noundef nonnull align 8 dereferenceable(88) %93, ptr noundef nonnull align 1 dereferenceable(32) %92)
          to label %94 unwind label %99

94:                                               ; preds = %.lr.ph
  invoke void @_ZNSt10shared_ptrIN7DynexCN18ITransactionReaderEEC2IS1_St14default_deleteIS1_EvEEOSt10unique_ptrIT_T0_E(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %95 unwind label %101

95:                                               ; preds = %94
  invoke void @_ZNSt7__cxx114listISt10shared_ptrIN7DynexCN18ITransactionReaderEESaIS4_EE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 8 dereferenceable(16) %14)
          to label %96 unwind label %103

96:                                               ; preds = %95
  call void @_ZNSt12__shared_ptrIN7DynexCN18ITransactionReaderELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #10
  call void @_ZNSt10unique_ptrIN7DynexCN18ITransactionReaderESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #10
  %97 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN7DynexCN20TransactionShortInfoESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #10
  %98 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN7DynexCN20TransactionShortInfoESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #10
  br i1 %98, label %.lr.ph, label %._crit_edge

99:                                               ; preds = %.lr.ph
  %100 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  br label %106

101:                                              ; preds = %94
  %102 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  br label %105

103:                                              ; preds = %95
  %104 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  call void @_ZNSt12__shared_ptrIN7DynexCN18ITransactionReaderELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #10
  br label %105

105:                                              ; preds = %103, %101
  %.pn68 = phi { ptr, i32 } [ %104, %103 ], [ %102, %101 ]
  call void @_ZNSt10unique_ptrIN7DynexCN18ITransactionReaderESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #10
  br label %106

106:                                              ; preds = %105, %99
  %.pn68.pn = phi { ptr, i32 } [ %.pn68, %105 ], [ %100, %99 ]
  %.4 = extractvalue { ptr, i32 } %.pn68.pn, 0
  %.445 = extractvalue { ptr, i32 } %.pn68.pn, 1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  %107 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTISt9exception) #10
  %108 = icmp eq i32 %.445, %107
  br i1 %108, label %109, label %147

109:                                              ; preds = %106
  %110 = call ptr @__cxa_begin_catch(ptr %.4) #10
  call void @llvm.lifetime.start.p0(i64 432, ptr nonnull %16) #10
  invoke void @_ZNK7Logging9LoggerRefclENS_5LevelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.Logging::LoggerMessage") align 8 %16, ptr noundef nonnull align 8 dereferenceable(40) %30, i32 noundef 1, ptr noundef nonnull align 8 dereferenceable(32) @_ZN7Logging10BRIGHT_REDB5cxx11E)
          to label %111 unwind label %127

111:                                              ; preds = %109
  %112 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA27_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %16, ptr noundef nonnull align 1 dereferenceable(27) @.str.58)
          to label %113 unwind label %129

113:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #10
  %114 = load ptr, ptr %110, align 8, !tbaa !57
  %115 = getelementptr inbounds i8, ptr %114, i64 16
  %116 = load ptr, ptr %115, align 8
  %117 = call noundef ptr %116(ptr noundef nonnull align 8 dereferenceable(8) %110) #10
  store ptr %117, ptr %17, align 8, !tbaa !59
  %118 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEPKcEOT_S5_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %112, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %119 unwind label %131

119:                                              ; preds = %113
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %16) #10
  call void @llvm.lifetime.end.p0(i64 432, ptr nonnull %16) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #10
  store ptr %0, ptr %19, align 8, !tbaa !60
  call void @"_ZNSt8functionIFbvEEC2IZN7DynexCN22BlockchainSynchronizer13processBlocksERNS4_17GetBlocksResponseEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #10
  %120 = invoke noundef zeroext i1 @_ZN7DynexCN22BlockchainSynchronizer16setFutureStateIfENS0_5StateEOSt8functionIFbvEE(ptr noundef nonnull align 8 dereferenceable(440) %0, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %121 unwind label %135

121:                                              ; preds = %119
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #10
  %122 = getelementptr inbounds i8, ptr %0, i64 16
  %123 = call { i32, ptr } @_ZSt15make_error_codeSt4errc(i32 noundef 22) #10
  %124 = extractvalue { i32, ptr } %123, 0
  %125 = extractvalue { i32, ptr } %123, 1
  invoke void @_ZN5Tools15ObserverManagerIN7DynexCN31IBlockchainSynchronizerObserverEE6notifyIMS2_FvSt10error_codeEJS5_EEEvT_DpT0_(ptr noundef nonnull align 8 dereferenceable(64) %122, i64 9, i64 0, i32 %124, ptr %125)
          to label %126 unwind label %137

126:                                              ; preds = %121
  invoke void @__cxa_end_catch()
          to label %149 unwind label %139

127:                                              ; preds = %109
  %128 = landingpad { ptr, i32 }
          cleanup
  br label %134

129:                                              ; preds = %111
  %130 = landingpad { ptr, i32 }
          cleanup
  br label %133

131:                                              ; preds = %113
  %132 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  br label %133

133:                                              ; preds = %131, %129
  %.pn71 = phi { ptr, i32 } [ %132, %131 ], [ %130, %129 ]
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %16) #10
  br label %134

134:                                              ; preds = %133, %127
  %.pn71.pn = phi { ptr, i32 } [ %.pn71, %133 ], [ %128, %127 ]
  call void @llvm.lifetime.end.p0(i64 432, ptr nonnull %16) #10
  br label %141

135:                                              ; preds = %119
  %136 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #10
  br label %141

137:                                              ; preds = %121
  %138 = landingpad { ptr, i32 }
          cleanup
  br label %141

139:                                              ; preds = %126
  %140 = landingpad { ptr, i32 }
          cleanup
  br label %142

141:                                              ; preds = %137, %135, %134
  %.pn74 = phi { ptr, i32 } [ %138, %137 ], [ %136, %135 ], [ %.pn71.pn, %134 ]
  invoke void @__cxa_end_catch()
          to label %142 unwind label %269

142:                                              ; preds = %141, %139
  %.pn76 = phi { ptr, i32 } [ %140, %139 ], [ %.pn74, %141 ]
  %.8 = extractvalue { ptr, i32 } %.pn76, 0
  %.849 = extractvalue { ptr, i32 } %.pn76, 1
  br label %147

143:                                              ; preds = %._crit_edge, %62
  invoke void @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(448) %9)
          to label %144 unwind label %80

144:                                              ; preds = %143
  call void @_ZN7DynexCN13CompleteBlockD2Ev(ptr noundef nonnull align 8 dereferenceable(448) %9) #10
  call void @llvm.lifetime.end.p0(i64 448, ptr nonnull %9) #10
  %145 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN7DynexCN15BlockShortEntryESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  %146 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN7DynexCN15BlockShortEntryESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #10
  br i1 %146, label %53, label %.thread

147:                                              ; preds = %142, %106, %91, %80
  %.950 = phi i32 [ %.849, %142 ], [ %.445, %106 ], [ %83, %80 ], [ %.243, %91 ]
  %.9 = phi ptr [ %.8, %142 ], [ %.4, %106 ], [ %82, %80 ], [ %.2, %91 ]
  call void @_ZN7DynexCN13CompleteBlockD2Ev(ptr noundef nonnull align 8 dereferenceable(448) %9) #10
  call void @llvm.lifetime.end.p0(i64 448, ptr nonnull %9) #10
  br label %148

148:                                              ; preds = %147, %57
  %.1051 = phi i32 [ %.950, %147 ], [ %60, %57 ]
  %.10 = phi ptr [ %.9, %147 ], [ %59, %57 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #10
  br label %265

149:                                              ; preds = %126
  call void @_ZN7DynexCN13CompleteBlockD2Ev(ptr noundef nonnull align 8 dereferenceable(448) %9) #10
  call void @llvm.lifetime.end.p0(i64 448, ptr nonnull %9) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #10
  br label %263

.thread:                                          ; preds = %144, %56, %40
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #10
  %150 = load i32, ptr %1, align 8, !tbaa !9
  %151 = call noundef i64 @_ZNKSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %37) #10
  %152 = trunc i64 %151 to i32
  %153 = add i32 %150, %152
  %154 = invoke noundef zeroext i1 @_ZNK7DynexCN22BlockchainSynchronizer17checkIfShouldStopEv(ptr noundef nonnull align 8 dereferenceable(440) %0)
          to label %155 unwind label %162

155:                                              ; preds = %.thread
  br i1 %154, label %247, label %156

156:                                              ; preds = %155
  call void @_ZNSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %37) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #10
  %157 = getelementptr inbounds i8, ptr %0, i64 312
  invoke void @_ZNSt11unique_lockISt5mutexEC2ERS0_(ptr noundef nonnull align 8 dereferenceable(9) %20, ptr noundef nonnull align 8 dereferenceable(40) %157)
          to label %158 unwind label %164

158:                                              ; preds = %156
  %159 = invoke noundef i32 @_ZN7DynexCN22BlockchainSynchronizer15updateConsumersERKNS_18BlockchainIntervalERKSt6vectorINS_13CompleteBlockESaIS5_EE(ptr noundef nonnull align 8 dereferenceable(440) %0, ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull align 8 dereferenceable(24) %6)
          to label %160 unwind label %166

160:                                              ; preds = %158
  invoke void @_ZNSt11unique_lockISt5mutexE6unlockEv(ptr noundef nonnull align 8 dereferenceable(9) %20)
          to label %161 unwind label %166

161:                                              ; preds = %160
  switch i32 %159, label %229 [
    i32 2, label %168
    i32 0, label %178
    i32 1, label %204
  ]

162:                                              ; preds = %253, %247, %.thread
  %163 = landingpad { ptr, i32 }
          cleanup
  br label %264

164:                                              ; preds = %156
  %165 = landingpad { ptr, i32 }
          cleanup
  br label %246

166:                                              ; preds = %204, %185, %178, %171, %160, %158
  %167 = landingpad { ptr, i32 }
          cleanup
  br label %245

168:                                              ; preds = %161
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #10
  store ptr %0, ptr %22, align 8, !tbaa !62
  call void @"_ZNSt8functionIFbvEEC2IZN7DynexCN22BlockchainSynchronizer13processBlocksERNS4_17GetBlocksResponseEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(8) %22) #10
  %169 = invoke noundef zeroext i1 @_ZN7DynexCN22BlockchainSynchronizer16setFutureStateIfENS0_5StateEOSt8functionIFbvEE(ptr noundef nonnull align 8 dereferenceable(440) %0, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %170 unwind label %176

170:                                              ; preds = %168
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #10
  br i1 %169, label %171, label %229

171:                                              ; preds = %170
  %172 = getelementptr inbounds i8, ptr %0, i64 16
  %173 = call { i32, ptr } @_ZSt15make_error_codeSt4errc(i32 noundef 22) #10
  %174 = extractvalue { i32, ptr } %173, 0
  %175 = extractvalue { i32, ptr } %173, 1
  invoke void @_ZN5Tools15ObserverManagerIN7DynexCN31IBlockchainSynchronizerObserverEE6notifyIMS2_FvSt10error_codeEJS5_EEEvT_DpT0_(ptr noundef nonnull align 8 dereferenceable(64) %172, i64 9, i64 0, i32 %174, ptr %175)
          to label %229 unwind label %166

176:                                              ; preds = %168
  %177 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #10
  br label %245

178:                                              ; preds = %161
  %179 = getelementptr inbounds i8, ptr %0, i64 176
  %180 = load ptr, ptr %179, align 8, !tbaa !64
  %181 = load ptr, ptr %180, align 8, !tbaa !57
  %182 = getelementptr inbounds i8, ptr %181, i64 64
  %183 = load ptr, ptr %182, align 8
  %184 = invoke noundef i32 %183(ptr noundef nonnull align 8 dereferenceable(8) %180)
          to label %185 unwind label %166

185:                                              ; preds = %178
  %186 = load ptr, ptr %179, align 8, !tbaa !64
  %187 = load ptr, ptr %186, align 8, !tbaa !57
  %188 = getelementptr inbounds i8, ptr %187, i64 56
  %189 = load ptr, ptr %188, align 8
  %190 = invoke noundef i32 %189(ptr noundef nonnull align 8 dereferenceable(8) %186)
          to label %191 unwind label %166

191:                                              ; preds = %185
  %.not = icmp eq i32 %184, %190
  br i1 %.not, label %229, label %192

192:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 432, ptr nonnull %23) #10
  invoke void @_ZNK7Logging9LoggerRefclENS_5LevelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.Logging::LoggerMessage") align 8 %23, ptr noundef nonnull align 8 dereferenceable(40) %30, i32 noundef 4, ptr noundef nonnull align 8 dereferenceable(32) @_ZN7Logging7DEFAULTB5cxx11E)
          to label %193 unwind label %197

193:                                              ; preds = %192
  %194 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA54_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %23, ptr noundef nonnull align 1 dereferenceable(54) @.str.59)
          to label %195 unwind label %199

195:                                              ; preds = %193
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %23) #10
  call void @llvm.lifetime.end.p0(i64 432, ptr nonnull %23) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #10
  store i32 100, ptr %25, align 4, !tbaa !106
  call void @_ZNSt6chrono8durationIlSt5ratioILl1ELl1000EEEC2IivEERKT_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 4 dereferenceable(4) %25)
  invoke void @_ZNSt11this_thread9sleep_forIlSt5ratioILl1ELl1000EEEEvRKNSt6chrono8durationIT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8) %24)
          to label %196 unwind label %202

196:                                              ; preds = %195
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #10
  br label %204

197:                                              ; preds = %192
  %198 = landingpad { ptr, i32 }
          cleanup
  br label %201

199:                                              ; preds = %193
  %200 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %23) #10
  br label %201

201:                                              ; preds = %199, %197
  %.pn78 = phi { ptr, i32 } [ %200, %199 ], [ %198, %197 ]
  call void @llvm.lifetime.end.p0(i64 432, ptr nonnull %23) #10
  br label %245

202:                                              ; preds = %195
  %203 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #10
  br label %245

204:                                              ; preds = %196, %161
  %205 = invoke noundef zeroext i1 @_ZN7DynexCN22BlockchainSynchronizer14setFutureStateENS0_5StateE(ptr noundef nonnull align 8 dereferenceable(440) %0, i32 noundef 2)
          to label %206 unwind label %166

206:                                              ; preds = %204
  %207 = getelementptr inbounds i8, ptr %0, i64 16
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #10
  %208 = getelementptr inbounds i8, ptr %0, i64 176
  %209 = load ptr, ptr %208, align 8, !tbaa !64
  %210 = load ptr, ptr %209, align 8, !tbaa !57
  %211 = getelementptr inbounds i8, ptr %210, i64 80
  %212 = load ptr, ptr %211, align 8
  %213 = invoke noundef i32 %212(ptr noundef nonnull align 8 dereferenceable(8) %209)
          to label %214 unwind label %224

214:                                              ; preds = %206
  store i32 %213, ptr %26, align 4, !tbaa !106
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #10
  %215 = load ptr, ptr %208, align 8, !tbaa !64
  %216 = load ptr, ptr %215, align 8, !tbaa !57
  %217 = getelementptr inbounds i8, ptr %216, i64 72
  %218 = load ptr, ptr %217, align 8
  %219 = invoke noundef i32 %218(ptr noundef nonnull align 8 dereferenceable(8) %215)
          to label %220 unwind label %226

220:                                              ; preds = %214
  store i32 %219, ptr %27, align 4, !tbaa !106
  %221 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIjERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %26, ptr noundef nonnull align 4 dereferenceable(4) %27)
  %222 = load i32, ptr %221, align 4, !tbaa !106
  invoke void @_ZN5Tools15ObserverManagerIN7DynexCN31IBlockchainSynchronizerObserverEE6notifyIMS2_FvjjEJjjEEEvT_DpT0_(ptr noundef nonnull align 8 dereferenceable(64) %207, i64 1, i64 0, i32 noundef %153, i32 noundef %222)
          to label %223 unwind label %226

223:                                              ; preds = %220
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #10
  br label %229

224:                                              ; preds = %206
  %225 = landingpad { ptr, i32 }
          cleanup
  br label %228

226:                                              ; preds = %220, %214
  %227 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #10
  br label %228

228:                                              ; preds = %226, %224
  %.pn80 = phi { ptr, i32 } [ %227, %226 ], [ %225, %224 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #10
  br label %245

229:                                              ; preds = %191, %170, %171, %223, %161
  %230 = call noundef zeroext i1 @_ZNKSt6vectorIN7DynexCN13CompleteBlockESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #10
  br i1 %230, label %244, label %231

231:                                              ; preds = %229
  %232 = call noundef nonnull align 8 dereferenceable(448) ptr @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %6) #10
  %233 = getelementptr inbounds i8, ptr %0, i64 216
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %233, ptr noundef nonnull align 8 dereferenceable(32) %232, i64 32, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.start.p0(i64 432, ptr nonnull %28) #10
  invoke void @_ZNK7Logging9LoggerRefclENS_5LevelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.Logging::LoggerMessage") align 8 %28, ptr noundef nonnull align 8 dereferenceable(40) %30, i32 noundef 4, ptr noundef nonnull align 8 dereferenceable(32) @_ZN7Logging7DEFAULTB5cxx11E)
          to label %234 unwind label %239

234:                                              ; preds = %231
  %235 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA17_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %28, ptr noundef nonnull align 1 dereferenceable(17) @.str.60)
          to label %236 unwind label %241

236:                                              ; preds = %234
  %237 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEN6Crypto4HashEEOT_S5_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %235, ptr noundef nonnull align 1 dereferenceable(32) %233)
          to label %238 unwind label %241

238:                                              ; preds = %236
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %28) #10
  call void @llvm.lifetime.end.p0(i64 432, ptr nonnull %28) #10
  br label %244

239:                                              ; preds = %231
  %240 = landingpad { ptr, i32 }
          cleanup
  br label %243

241:                                              ; preds = %236, %234
  %242 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %28) #10
  br label %243

243:                                              ; preds = %241, %239
  %.pn82 = phi { ptr, i32 } [ %242, %241 ], [ %240, %239 ]
  call void @llvm.lifetime.end.p0(i64 432, ptr nonnull %28) #10
  br label %245

244:                                              ; preds = %238, %229
  call void @_ZNSt11unique_lockISt5mutexED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %20) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #10
  br label %247

245:                                              ; preds = %243, %228, %202, %201, %176, %166
  %.pn82.pn = phi { ptr, i32 } [ %.pn82, %243 ], [ %.pn80, %228 ], [ %167, %166 ], [ %203, %202 ], [ %.pn78, %201 ], [ %177, %176 ]
  call void @_ZNSt11unique_lockISt5mutexED2Ev(ptr noundef nonnull align 8 dereferenceable(9) %20) #10
  br label %246

246:                                              ; preds = %245, %164
  %.pn82.pn.pn = phi { ptr, i32 } [ %.pn82.pn, %245 ], [ %165, %164 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #10
  br label %264

247:                                              ; preds = %244, %155
  %248 = invoke noundef zeroext i1 @_ZNK7DynexCN22BlockchainSynchronizer17checkIfShouldStopEv(ptr noundef nonnull align 8 dereferenceable(440) %0)
          to label %249 unwind label %162

249:                                              ; preds = %247
  br i1 %248, label %250, label %263

250:                                              ; preds = %249
  call void @llvm.lifetime.start.p0(i64 432, ptr nonnull %29) #10
  invoke void @_ZNK7Logging9LoggerRefclENS_5LevelERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.Logging::LoggerMessage") align 8 %29, ptr noundef nonnull align 8 dereferenceable(40) %30, i32 noundef 2, ptr noundef nonnull align 8 dereferenceable(32) @_ZN7Logging13BRIGHT_YELLOWB5cxx11E)
          to label %251 unwind label %258

251:                                              ; preds = %250
  %252 = invoke noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA32_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161) %29, ptr noundef nonnull align 1 dereferenceable(32) @.str.61)
          to label %253 unwind label %260

253:                                              ; preds = %251
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %29) #10
  call void @llvm.lifetime.end.p0(i64 432, ptr nonnull %29) #10
  %254 = getelementptr inbounds i8, ptr %0, i64 16
  %255 = call { i32, ptr } @_ZSt15make_error_codeSt4errc(i32 noundef 4) #10
  %256 = extractvalue { i32, ptr } %255, 0
  %257 = extractvalue { i32, ptr } %255, 1
  invoke void @_ZN5Tools15ObserverManagerIN7DynexCN31IBlockchainSynchronizerObserverEE6notifyIMS2_FvSt10error_codeEJS5_EEEvT_DpT0_(ptr noundef nonnull align 8 dereferenceable(64) %254, i64 9, i64 0, i32 %256, ptr %257)
          to label %263 unwind label %162

258:                                              ; preds = %250
  %259 = landingpad { ptr, i32 }
          cleanup
  br label %262

260:                                              ; preds = %251
  %261 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7Logging13LoggerMessageD1Ev(ptr noundef nonnull align 8 dereferenceable(161) %29) #10
  br label %262

262:                                              ; preds = %260, %258
  %.pn86 = phi { ptr, i32 } [ %261, %260 ], [ %259, %258 ]
  call void @llvm.lifetime.end.p0(i64 432, ptr nonnull %29) #10
  br label %264

263:                                              ; preds = %149, %249, %253
  call void @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #10
  call void @_ZN7DynexCN18BlockchainIntervalD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #10
  ret void

264:                                              ; preds = %262, %246, %162
  %.pn88 = phi { ptr, i32 } [ %163, %162 ], [ %.pn86, %262 ], [ %.pn82.pn.pn, %246 ]
  %.17 = extractvalue { ptr, i32 } %.pn88, 0
  %.1758 = extractvalue { ptr, i32 } %.pn88, 1
  br label %265

265:                                              ; preds = %264, %148
  %.1859 = phi i32 [ %.1758, %264 ], [ %.1051, %148 ]
  %.18 = phi ptr [ %.17, %264 ], [ %.10, %148 ]
  call void @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #10
  call void @_ZN7DynexCN18BlockchainIntervalD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #10
  br label %266

266:                                              ; preds = %265, %52
  %.1960 = phi i32 [ %.1859, %265 ], [ %.041, %52 ]
  %.19 = phi ptr [ %.18, %265 ], [ %.0, %52 ]
  %267 = insertvalue { ptr, i32 } poison, ptr %.19, 0
  %268 = insertvalue { ptr, i32 } %267, i32 %.1960, 1
  resume { ptr, i32 } %268

269:                                              ; preds = %141
  %270 = landingpad { ptr, i32 }
          catch ptr null
  %271 = extractvalue { ptr, i32 } %270, 0
  call void @__clang_call_terminate(ptr %271) #11
  unreachable
}

; Function Attrs: nofree nosync nounwind memory(none)
declare i32 @llvm.eh.typeid.for.p0(ptr) #8

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { i32, ptr } @_ZSt15make_error_codeSt4errc(i32 noundef) local_unnamed_addr #9

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA29_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 1 dereferenceable(29)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7DynexCN18BlockchainIntervalC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #9 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPN7DynexCN15BlockShortEntryESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #9

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(448) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN7DynexCN15BlockShortEntryESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7DynexCN13CompleteBlockC2Ev(ptr noundef nonnull align 8 dereferenceable(448)) unnamed_addr #9 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN6Crypto4HashESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 1 dereferenceable(32)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(392) ptr @_ZN5boost8optionalIN7DynexCN5BlockEEaSIS2_EENS_9enable_ifINS_7is_sameIS2_NS_5decayIT_E4typeEEERS3_E4typeEOS8_(ptr noundef nonnull align 8 dereferenceable(392), ptr noundef nonnull align 8 dereferenceable(384)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx114listISt10shared_ptrIN7DynexCN18ITransactionReaderEESaIS4_EE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3 align 2

declare void @_ZN7DynexCN23createTransactionPrefixERKNS_11TransactionE(ptr dead_on_unwind writable sret(%"class.std::unique_ptr.111") align 8, ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN5boost8optionalIN7DynexCN5BlockEEptEv(ptr noundef nonnull align 8 dereferenceable(392)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt10shared_ptrIN7DynexCN18ITransactionReaderEEC2IS1_St14default_deleteIS1_EvEEOSt10unique_ptrIT_T0_E(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt12__shared_ptrIN7DynexCN18ITransactionReaderELN9__gnu_cxx12_Lock_policyE2EED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrIN7DynexCN18ITransactionReaderESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN7DynexCN20TransactionShortInfoESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN7DynexCN20TransactionShortInfoESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPN7DynexCN20TransactionShortInfoESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #9

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(120) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN7DynexCN20TransactionShortInfoESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #7 align 2

declare void @_ZN7DynexCN23createTransactionPrefixERKNS_17TransactionPrefixERKN6Crypto4HashE(ptr dead_on_unwind writable sret(%"class.std::unique_ptr.111") align 8, ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 1 dereferenceable(32)) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN7DynexCN20TransactionShortInfoESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA27_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 1 dereferenceable(27)) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFbvEEC2IZN7DynexCN22BlockchainSynchronizer13processBlocksERNS4_17GetBlocksResponseEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(448)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7DynexCN13CompleteBlockD2Ev(ptr noundef nonnull align 8 dereferenceable(448)) unnamed_addr #9 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN7DynexCN15BlockShortEntryESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN7DynexCN22BlockchainSynchronizer15updateConsumersERKNS_18BlockchainIntervalERKSt6vectorINS_13CompleteBlockESaIS5_EE(ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFbvEEC2IZN7DynexCN22BlockchainSynchronizer13processBlocksERNS4_17GetBlocksResponseEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA54_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 1 dereferenceable(54)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNSt11this_thread9sleep_forIlSt5ratioILl1ELl1000EEEEvRKNSt6chrono8durationIT_T0_EE(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6chrono8durationIlSt5ratioILl1ELl1000EEEC2IivEERKT_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN5Tools15ObserverManagerIN7DynexCN31IBlockchainSynchronizerObserverEE6notifyIMS2_FvjjEJjjEEEvT_DpT0_(ptr noundef nonnull align 8 dereferenceable(64), i64, i64, i32 noundef, i32 noundef) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIjERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #9

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIN7DynexCN13CompleteBlockESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(448) ptr @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(161) ptr @_ZStlsIN7Logging13LoggerMessageEA32_cEOT_S4_RKT0_(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 1 dereferenceable(32)) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN7DynexCN13CompleteBlockESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7DynexCN18BlockchainIntervalD2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #9 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { noinline noreturn nounwind uwtable "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nofree nosync nounwind memory(none) }
attributes #9 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { nounwind }
attributes #11 = { noreturn nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"_ZTSN7DynexCN22BlockchainSynchronizer17GetBlocksResponseE", !11, i64 0, !12, i64 8}
!11 = !{!"int", !7, i64 0}
!12 = !{!"_ZTSSt6vectorIN7DynexCN15BlockShortEntryESaIS1_EE", !13, i64 0}
!13 = !{!"_ZTSSt12_Vector_baseIN7DynexCN15BlockShortEntryESaIS1_EE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseIN7DynexCN15BlockShortEntryESaIS1_EE12_Vector_implE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseIN7DynexCN15BlockShortEntryESaIS1_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!16 = !{!"any pointer", !7, i64 0}
!17 = !{!18, !11, i64 0}
!18 = !{!"_ZTSN7DynexCN18BlockchainIntervalE", !11, i64 0, !19, i64 8}
!19 = !{!"_ZTSSt6vectorIN6Crypto4HashESaIS1_EE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIN6Crypto4HashESaIS1_EE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIN6Crypto4HashESaIS1_EE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIN6Crypto4HashESaIS1_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!23 = !{i64 0, i64 32, !24}
!24 = !{!7, !7, i64 0}
!25 = !{!26, !28, i64 32}
!26 = !{!"_ZTSN7DynexCN15BlockShortEntryE", !27, i64 0, !28, i64 32, !29, i64 40, !51, i64 424}
!27 = !{!"_ZTSN6Crypto4HashE", !7, i64 0}
!28 = !{!"bool", !7, i64 0}
!29 = !{!"_ZTSN7DynexCN5BlockE", !30, i64 0, !31, i64 48, !33, i64 248, !19, i64 360}
!30 = !{!"_ZTSN7DynexCN11BlockHeaderE", !7, i64 0, !7, i64 1, !11, i64 4, !6, i64 8, !27, i64 16}
!31 = !{!"_ZTSN7DynexCN11ParentBlockE", !7, i64 0, !7, i64 1, !27, i64 2, !32, i64 34, !19, i64 40, !33, i64 64, !19, i64 176}
!32 = !{!"short", !7, i64 0}
!33 = !{!"_ZTSN7DynexCN11TransactionE", !34, i64 0, !47, i64 88}
!34 = !{!"_ZTSN7DynexCN17TransactionPrefixE", !7, i64 0, !6, i64 8, !35, i64 16, !39, i64 40, !43, i64 64}
!35 = !{!"_ZTSSt6vectorIN5boost7variantIN7DynexCN9BaseInputEJNS2_8KeyInputENS2_19MultisignatureInputEEEESaIS6_EE", !36, i64 0}
!36 = !{!"_ZTSSt12_Vector_baseIN5boost7variantIN7DynexCN9BaseInputEJNS2_8KeyInputENS2_19MultisignatureInputEEEESaIS6_EE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseIN5boost7variantIN7DynexCN9BaseInputEJNS2_8KeyInputENS2_19MultisignatureInputEEEESaIS6_EE12_Vector_implE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseIN5boost7variantIN7DynexCN9BaseInputEJNS2_8KeyInputENS2_19MultisignatureInputEEEESaIS6_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!39 = !{!"_ZTSSt6vectorIN7DynexCN17TransactionOutputESaIS1_EE", !40, i64 0}
!40 = !{!"_ZTSSt12_Vector_baseIN7DynexCN17TransactionOutputESaIS1_EE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseIN7DynexCN17TransactionOutputESaIS1_EE12_Vector_implE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIN7DynexCN17TransactionOutputESaIS1_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!43 = !{!"_ZTSSt6vectorIhSaIhEE", !44, i64 0}
!44 = !{!"_ZTSSt12_Vector_baseIhSaIhEE", !45, i64 0}
!45 = !{!"_ZTSNSt12_Vector_baseIhSaIhEE12_Vector_implE", !46, i64 0}
!46 = !{!"_ZTSNSt12_Vector_baseIhSaIhEE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!47 = !{!"_ZTSSt6vectorIS_IN6Crypto9SignatureESaIS1_EESaIS3_EE", !48, i64 0}
!48 = !{!"_ZTSSt12_Vector_baseISt6vectorIN6Crypto9SignatureESaIS2_EESaIS4_EE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseISt6vectorIN6Crypto9SignatureESaIS2_EESaIS4_EE12_Vector_implE", !50, i64 0}
!50 = !{!"_ZTSNSt12_Vector_baseISt6vectorIN6Crypto9SignatureESaIS2_EESaIS4_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!51 = !{!"_ZTSSt6vectorIN7DynexCN20TransactionShortInfoESaIS1_EE", !52, i64 0}
!52 = !{!"_ZTSSt12_Vector_baseIN7DynexCN20TransactionShortInfoESaIS1_EE", !53, i64 0}
!53 = !{!"_ZTSNSt12_Vector_baseIN7DynexCN20TransactionShortInfoESaIS1_EE12_Vector_implE", !54, i64 0}
!54 = !{!"_ZTSNSt12_Vector_baseIN7DynexCN20TransactionShortInfoESaIS1_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!55 = !{i8 0, i8 2}
!56 = !{}
!57 = !{!58, !58, i64 0}
!58 = !{!"vtable pointer", !8, i64 0}
!59 = !{!16, !16, i64 0}
!60 = !{!61, !16, i64 0}
!61 = !{!"_ZTSZN7DynexCN22BlockchainSynchronizer13processBlocksERNS0_17GetBlocksResponseEE3$_0", !16, i64 0}
!62 = !{!63, !16, i64 0}
!63 = !{!"_ZTSZN7DynexCN22BlockchainSynchronizer13processBlocksERNS0_17GetBlocksResponseEE3$_1", !16, i64 0}
!64 = !{!65, !16, i64 176}
!65 = !{!"_ZTSN7DynexCN22BlockchainSynchronizerE", !66, i64 0, !77, i64 80, !78, i64 88, !81, i64 128, !16, i64 176, !27, i64 184, !27, i64 216, !89, i64 248, !89, i64 252, !90, i64 256, !96, i64 264, !101, i64 288, !75, i64 312, !75, i64 352, !104, i64 392}
!66 = !{!"_ZTSN7DynexCN15IObservableImplINS_31IBlockchainSynchronizerObserverENS_23IBlockchainSynchronizerEEE", !67, i64 0, !70, i64 16}
!67 = !{!"_ZTSN7DynexCN23IBlockchainSynchronizerE", !68, i64 0, !69, i64 8}
!68 = !{!"_ZTSN7DynexCN11IObservableINS_31IBlockchainSynchronizerObserverEEE"}
!69 = !{!"_ZTSN7DynexCN19IStreamSerializableE"}
!70 = !{!"_ZTSN5Tools15ObserverManagerIN7DynexCN31IBlockchainSynchronizerObserverEEE", !71, i64 0, !75, i64 24}
!71 = !{!"_ZTSSt6vectorIPN7DynexCN31IBlockchainSynchronizerObserverESaIS2_EE", !72, i64 0}
!72 = !{!"_ZTSSt12_Vector_baseIPN7DynexCN31IBlockchainSynchronizerObserverESaIS2_EE", !73, i64 0}
!73 = !{!"_ZTSNSt12_Vector_baseIPN7DynexCN31IBlockchainSynchronizerObserverESaIS2_EE12_Vector_implE", !74, i64 0}
!74 = !{!"_ZTSNSt12_Vector_baseIPN7DynexCN31IBlockchainSynchronizerObserverESaIS2_EE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!75 = !{!"_ZTSSt5mutex", !76, i64 0}
!76 = !{!"_ZTSSt12__mutex_base", !7, i64 0}
!77 = !{!"_ZTSN7DynexCN13INodeObserverE"}
!78 = !{!"_ZTSN7Logging9LoggerRefE", !16, i64 0, !79, i64 8}
!79 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !80, i64 0, !6, i64 8, !7, i64 16}
!80 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !16, i64 0}
!81 = !{!"_ZTSSt3mapIPN7DynexCN19IBlockchainConsumerESt10shared_ptrINS0_20SynchronizationStateEESt4lessIS2_ESaISt4pairIKS2_S5_EEE", !82, i64 0}
!82 = !{!"_ZTSSt8_Rb_treeIPN7DynexCN19IBlockchainConsumerESt4pairIKS2_St10shared_ptrINS0_20SynchronizationStateEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE", !83, i64 0}
!83 = !{!"_ZTSNSt8_Rb_treeIPN7DynexCN19IBlockchainConsumerESt4pairIKS2_St10shared_ptrINS0_20SynchronizationStateEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE13_Rb_tree_implISC_Lb1EEE", !84, i64 0, !86, i64 8}
!84 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIPN7DynexCN19IBlockchainConsumerEEE", !85, i64 0}
!85 = !{!"_ZTSSt4lessIPN7DynexCN19IBlockchainConsumerEE"}
!86 = !{!"_ZTSSt15_Rb_tree_header", !87, i64 0, !6, i64 32}
!87 = !{!"_ZTSSt18_Rb_tree_node_base", !88, i64 0, !16, i64 8, !16, i64 16, !16, i64 24}
!88 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!89 = !{!"_ZTSN7DynexCN22BlockchainSynchronizer5StateE", !7, i64 0}
!90 = !{!"_ZTSSt10unique_ptrISt6threadSt14default_deleteIS0_EE", !91, i64 0}
!91 = !{!"_ZTSSt15__uniq_ptr_dataISt6threadSt14default_deleteIS0_ELb1ELb1EE", !92, i64 0}
!92 = !{!"_ZTSSt15__uniq_ptr_implISt6threadSt14default_deleteIS0_EE", !93, i64 0}
!93 = !{!"_ZTSSt5tupleIJPSt6threadSt14default_deleteIS0_EEE", !94, i64 0}
!94 = !{!"_ZTSSt11_Tuple_implILm0EJPSt6threadSt14default_deleteIS0_EEE", !95, i64 0}
!95 = !{!"_ZTSSt10_Head_baseILm0EPSt6threadLb0EE", !16, i64 0}
!96 = !{!"_ZTSNSt7__cxx114listISt4pairIPKN7DynexCN18ITransactionReaderESt7promiseISt10error_codeEESaIS9_EEE", !97, i64 0}
!97 = !{!"_ZTSNSt7__cxx1110_List_baseISt4pairIPKN7DynexCN18ITransactionReaderESt7promiseISt10error_codeEESaIS9_EEE", !98, i64 0}
!98 = !{!"_ZTSNSt7__cxx1110_List_baseISt4pairIPKN7DynexCN18ITransactionReaderESt7promiseISt10error_codeEESaIS9_EE10_List_implE", !99, i64 0}
!99 = !{!"_ZTSNSt8__detail17_List_node_headerE", !100, i64 0, !6, i64 16}
!100 = !{!"_ZTSNSt8__detail15_List_node_baseE", !16, i64 0, !16, i64 8}
!101 = !{!"_ZTSNSt7__cxx114listISt4pairIPKN6Crypto4HashESt7promiseIvEESaIS8_EEE", !102, i64 0}
!102 = !{!"_ZTSNSt7__cxx1110_List_baseISt4pairIPKN6Crypto4HashESt7promiseIvEESaIS8_EEE", !103, i64 0}
!103 = !{!"_ZTSNSt7__cxx1110_List_baseISt4pairIPKN6Crypto4HashESt7promiseIvEESaIS8_EE10_List_implE", !99, i64 0}
!104 = !{!"_ZTSSt18condition_variable", !105, i64 0}
!105 = !{!"_ZTSSt9__condvar", !7, i64 0}
!106 = !{!11, !11, i64 0}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass